Bulk writes
Last updated: April 1, 2026
Overview
Merge's bulk writes feature enables you to create multiple objects in a single API call, rather than making separate requests for each individual object. This capability is designed for high-volume write operations, allowing you to efficiently scale your integration workflows while minimizing API overhead and staying within third-party rate limits.
Endpoints
Integration support
The bulk write endpoint currently supports the following integrations + common models. If you have specific Common Models or integrations you'd like to see coverage for, please let us know by reaching out to your CSM or [email protected]!
Integration | Common Models |
NetSuite | Invoices Item Fulfillments Sales Orders |
Quickbooks Online | Expenses Invoices |
Xero | Expenses |
Payloads
POST /<common_model>/bulk
Request body
A sample of a request body to /invoices/bulk is shown below. Note, the request body must adhere to the below requirements
Max payload size of 5 MB or max of 100 objects
Each object must contain a unique
item_idThis is passed to the third party API to uniquely identife maps to the item’s ID in the third-party
Each object should be identical in structure to the payload used in the single-object create (POST) endpoint for Merge Common Models
{
"batch_items": [
{
"item_id": "1",
"payload": {
"type": "ACCOUNTS_RECEIVABLE",
"contact": "022a2bef-57e5-4def-8ed2-7c41bd9a5ed8",
"number": "AIQ12546",
"issue_date": "2020-03-31T00:00:00Z",
"due_date": "2020-04-15T00:00:00Z",
"paid_on_date": "2020-04-01T00:00:00Z",
"memo": "Weekly Payment",
"company": "595c8f97-2ac4-45b7-b000-41bdf43240b5",
"employee": "7442f0d5-722d-45bd-b807-6e38489d37fe",
"currency": "USD",
"exchange_rate": "2.9",
"payment_term": "89d329de-825f-4ac6-8369-3c58b4e68bee",
"total_discount": 0,
"sub_total": 100,
"status": "DRAFT",
"total_tax_amount": 5,
"total_amount": 105,
"balance": 105,
"tracking_categories": [
"7dc5ca17-d311-44cd-9ce0-333080367a18"
],
"accounting_period": "7dc5ca17-d311-44cd-9ce0-333080367a18",
"line_items": [
{
"description": "Pickleball lessons",
"unit_price": 50,
"quantity": 1,
"total_amount": 50,
"currency": "USD",
"exchange_rate": "2.9",
"employee": "7442f0d5-722d-45bd-b807-6e38489d37fe",
"tax_rate": "a12e7c20-1922-9df7-s75n-edfeewnn7384",
"item": "5b3c1341-a20f-4e51-b72c-f3830a16c97b",
"account": "cd0f32d4-a493-11ec-b909-0242ac120002",
"project": "22e65a5d-2df5-4e6e-884a-e538d0339000",
"contact": "908934-49j9-093f-0989-908923908",
"tracking_categories": [
"b38c59b0-a9d7-4740-b1ee-5436c6751e3d"
],
"company": "595c8f97-2ac4-45b7-b000-41bdf43240b5"
}
]
}
],
"inclusive_of_tax": true
}
}
]
}Response body
{
"batch_id": "d0a3ca3e-2d7a-44cd-a94b-bda805f23b5c"
}GET /<common_model>/bulk/<batch_id>
{
"batch_id": "123e4567-e89b-12d3-a456-426614174000",
"status": "PARTIAL_SUCCESS",
"total_count": 2,
"objects": [
{
"item_id": "1",
"status": "SUCCESS",
"response": {
"merge_common_model_id": "9871b4a9-f5d2-4f3b-a66b-dfedbed42c46"
}
},
{
"item_id": "2",
"status": "FAILED",
"response": {
"error_message": "You cannot update this invoice at this time"
}
}
]
}Possible overall statuses
ENQUEUED- The request has been received and a task has been enqueued for processingIN_PROGRESS- The enqueued task is being processedPARTIAL_SUCCESS- The task has been processed, but not all objects were written successfullySUCCESS- The task has been processed, and all objects were written successfullyFAILED- The task has been processed, but ran into an error while processingRATE_LIMITED- The request was received but ran into rate limits while processing. The rate limited objects are being retried.
Possible per-object statuses
PENDING- This object has not been processed yetSUCCESS- This object was successfully POSTedFAILURE- This object was not successfully POSTed