Delete Sales Order
DELETE/api/sales-orders/:salesOrder
Deletes a sales order along with its dependent records (lines, fulfillments, allocations, payments). Inventory consumed by the order is released back to stock.
orders:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
The order cannot be deleted when any of its return receipts produced inventory that has already been consumed by other transactions — deleting it would orphan those downstream costs. In that case the request fails with 422 and the response data details which return receipts and quantities are blocking the delete.
Use POST /api/sales-orders/deletable to pre-check deletability, and the bulk delete endpoints to remove many orders in the background.
Authentication: Requires Bearer token.
Path parameters:
- salesOrder (required): Sales order ID.
Requires permission: sales_orders.delete
Returns 422 when the order has a PayPal payment recorded or still clearing: cancel or archive it instead. Deleting an order cancels its active PayPal pay links. The same block applies to every delete path, including deleting a sales channel or integration whose orders hold PayPal money.
Returns 422 when a sales credit that belongs to another order has a line referring to one of this order's lines — deleting the order would also delete that credit, with the other order's payments. Remove or change that credit line first, or cancel or archive this order instead.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not Found
Response Headers
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.