Skip to content

Valid cancellation reasons per channel

When you cancel an order with POST /v1/salesOrder/cancel/{orderNumber}, the reason you send has to be one the order’s channel accepts. Some channels publish a fixed list. Every other channel takes free text.

This page applies to the v1 cancel route only. POST /v2/storefront/orders/cancel takes no reason, so there is nothing to validate. See Order cancellation, returns and refunds.

These lists are generated from the same configuration the cancel endpoint validates against, and they refresh daily. They are not a hand-kept copy, so they cannot fall behind what the endpoint actually accepts.

Send one of these strings exactly as written. They are case-sensitive, and the endpoint compares them literally.

Amazon

  • NoInventory
  • ShippingAddressUndeliverable
  • CustomerExchange
  • BuyerCanceled
  • GeneralAdjustment
  • CarrierCreditDecision
  • RiskAssessmentInformationNotValid
  • CarrierCoverageFailure
  • CustomerReturn
  • MerchandiseNotReceived

eBay

  • OUT_OF_STOCK_OR_CANNOT_FULFILL
  • BUYER_ASKED_CANCEL
  • ADDRESS_ISSUES

Walmart

  • CUSTOMER_REQUESTED_SELLER_TO_CANCEL
  • SELLER_CANCEL_OUT_OF_STOCK
  • SELLER_CANCEL_FRAUD_STOP_SHIPMENT
  • SELLER_CANCEL_PRICING_ERROR
  • SELLER_CANCEL_ADDRESS_NOT_SERVICEABLE

Every channel not listed above accepts free text. Send whatever describes the cancellation; nothing is validated against a list. Target is one of these.

Sending a reason the channel does not accept

Section titled “Sending a reason the channel does not accept”

The request is rejected before anything is cancelled. The status code is 404, not 400. Handle it deliberately, because the same route also returns 404 when the order number itself is unknown. Tell the two apart by the message:

{
"errorCode": 404,
"errorMessages": [
"Cancellation Reason is invalid. It has to be in the list of valid reasons provided at developer.zentail.com"
],
"referenceId": "6c1f2f3a-9b4d-4d1e-8b27-1e0b0a5a1f77"
}

API changelog · Built 0c509dd3