Create/Update orders in batch
Use this endpoint to insert orders into a Sendcloud API integration.
Upsert behavior
This is an upsert endpoint, which means:- If an order with the same
order_idandintegration.idcombination already exists, it will be updated - If no matching order exists, a new order will be created
- Optional: You can include the Sendcloud
idfield to explicitly update a specific order- Important: When returned in responses,
idis an integer, but when sending it in requests, it must be a string - Example: Response returns
"id": 669, but request must send"id": "669"
- Important: When returned in responses,
Batch processing
- Process multiple orders in a single request (up to 100 orders maximum)
- Orders from different integrations can be included in the same batch
- All-or-nothing transaction: If any order in the batch fails validation, the entire batch is rejected and zero orders are created or updated. There is no partial success — either all orders are processed or none are
- On failure (HTTP 400), the response includes error details with
source.pointerindicating which order in the array caused the issue (e.g.,[1]for the second order, 0-indexed) - If you send multiple orders and one fails, you need to fix the failing order and resubmit the entire batch
Limitations and constraints
- Maximum batch size: 100 orders per request
- Upsert matching: Orders are matched by the combination of
order_id+integration.id - Immutable fields: When updating existing orders, certain fields like
order_idcannot be changed - Concurrent processing: If the same
order_idis being processed by another request, you’ll receive a conflict error. Wait a moment and retry - Integration access: You can only create/update orders for integrations that belong to your account
Asynchronous processing
Order saving happens asynchronously. A successful201 response means the request was accepted, but the order may not be immediately available for other operations (e.g., creating a label via the Ship an Order API).
- After creating an order, verify it exists by retrieving it with the Retrieve an order endpoint before attempting to ship it
- If you plan to create an order and immediately ship it, allow a short delay and confirm the order is available before calling the Ship an Order API
Best practices
- Ensure all required fields are present before sending the request
- Handle errors gracefully and implement retry logic for transient failures
Authorizations
Basic Authentication using API key and secrets is currently the main authentication mechanism.
Headers
If you are an official Sendcloud Tech Partner, send your unique Sendcloud Partner UUID as a request header for the system to recognize you.
The header is not required but if it is set, the system will check it. An unknown or invalid UUID will cause a 400 error.
Body
External order ID assigned by shop system
1"7bdd5bfd-76bc-4654-9d40-5d5d49f1cd6c"
Unique order number generated manually or by shop system
1"101170081"
Node for general order information
Node for everything about payments and money
Customs information required for international shipments.
Node for an information about customer
Sendcloud Billing Address object
Sendcloud Shipping Address object
Shipping information
Node for service point information. The service point information can be retrieved from the Service points API.
You must provide either the Sendcloud id or the carrier_service_point_id to identify the service point.
- Sendcloud ID
- Carrier Service Point ID
Sendcloud's internal ID for the order.
- In responses: Returned as an integer (e.g.,
669) - In requests: Optional field for explicitly updating a specific order. Must be provided as a string (e.g.,
"669") - If omitted in requests, the upsert logic uses the combination of
order_id+integration.idto match existing orders
"669"
Response
OK.