Skip to main content

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: open if its fulfillment_status is fulfilled or over_fulfilled. This guard suppresses spurious reopens from sales-channel sync paths (e.g. Walmart Seller-Fulfilled "Shipped") that would leave the order stuck in open after updateFulfillmentStatus() runs.
  • Manual UI reopens express explicit user intent and pass force_reopen: true to 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: open is sent on a currently closed order.
  • 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

Successful response