Issue Channel Refund
POST/api/sales-orders/:salesOrder/channel-refunds
Creates and submits a refund to the order's sales channel. Amounts are validated server-side against the channel's refundable state: line quantities may not exceed the refundable quantity, line amounts may not exceed quantity times unit price, and the shipping amount may not exceed the refundable shipping. Line tax is added automatically to the total sent to the channel.
Fields:
lines(array, required, may be empty when only shipping or a custom amount is refunded)lines[].sales_order_line_id(integer, required) — must belong to the orderlines[].quantity(number, required, min 0)lines[].amount(number, required, min 0) — product amount excluding taxlines[].restock(string, optional: return | cancel | no_restock) — channels with restock support onlylines[].restock_location_id(string, optional) — channel location for restockingshipping_amount(number, optional, min 0)custom_amount(number, optional, min 0) — only on channels whose capabilities reportcustom_amount: truereason(string, optional; required when capabilities reportreason_required: true— use a value fromcapabilities.reasons)note(string, optional, max 1000)notify_customer(boolean, optional)
Only one refund request may be in flight per order at a time; a second submission returns 409 until the first reaches a terminal state.
Asynchronous channels (eBay) return status: awaiting_channel; the status updates automatically once the channel finishes processing.
Requires a Bearer token and refund permission.
- Each
lines[].sales_order_line_idmust be unique within the request (distinctvalidation) — duplicate entries are rejected with a 422 because their summed quantity could exceed the line's refundable quantity.
Request
Responses
- 201
- 401
- 403
- 404
- 409
- 422
- 429
Created
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 — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Conflict
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.