Update Sales Order
PUT/api/sales-orders/:salesOrder
Updates a sales order. Accepts a partial payload — only the provided fields are applied.
Authentication: Requires Bearer token.
Common use cases:
- Reopen a closed order: send
{"order_status": "open", "force_reopen": true} - Close an open order: send
{"order_status": "closed"} - Cancel an order: send
{"canceled_at": "2026-05-08T12:00:00Z"} - Update lines, addresses, or other fields by including only the keys you want to change.
Reopen behavior (force_reopen):
- A closed order is normally not reopened by
order_status: openif itsfulfillment_statusisfulfilledorover_fulfilled. This guard suppresses spurious reopens from sales-channel sync paths (e.g. Walmart Seller-Fulfilled "Shipped") that would leave the order stuck inopenafterupdateFulfillmentStatus()runs. - Manual UI reopens express explicit user intent and pass
force_reopen: trueto bypass the guard.
Selected request body fields (all optional unless noted):
- order_status (string): One of draft, open, reserved, closed, cancelled, refunded, completed.
- force_reopen (bool, default false): When true, allow reopening a closed order even if it is fulfilled / over-fulfilled. Only meaningful when
order_status: openis sent on a currentlyclosedorder. - fulfillment_status (string): unfulfilled, partially_fulfilled, fulfilled, over_fulfilled, out_of_sync.
- payment_status (string|null): unpaid, partially_paid, paid, refunded.
- canceled_at (date-time|null): Cancel the order by setting; uncancel by setting to null.
- sales_order_number (string), customer_po_number (string|null), order_date (date), payment_date (date|null), ship_by_date (date|null), hold_until_date (date|null) — "do not ship before" release date for preorders / holds, deliver_by_date (date|null), fulfilled_at (date-time|null), tracking_number (string|null).
- store_id (int|null), sales_channel_id (int), shipping_method_id (int|null), customer_id (int|null), sales_rep_id (int|null), sales_rep_name (string|null), shipping_address_id (int|null), billing_address_id (int|null), currency_id (int), currency_code (string|null), tax_rate_id (int|null), sub_sales_channel_id (int|null).
- requested_shipping_method (string|null), packing_slip_printed_at (date-time|null), last_synced_from_sales_channel_at (date-time|null), is_tax_included (bool|null).
- tags (array|null), discount_lines (array|null), sales_order_lines (array of SalesOrderLineData), financial_lines (array of FinancialLineData), custom_field_values (array), notes (array of NoteData), customer (CustomerData|null), shipping_address (AddressData|null), billing_address (AddressData|null).
- Quote fields: is_quote (bool), memo_for_customer (string|null), quote_sent_at (date-time|null), quote_approved_by_customer_at (date-time|null), quote_expires_at (date-time|null).
- Behavioral flags: shouldDeleteFulfillments (bool, default false), shippingAddressChanged (bool, default false), on_hold (bool, default false), deleteFulfillmentsReason (string).
Path parameters:
- salesOrder (required): Sales order ID.
Request
Responses
- 200
Successful response