POST /client/trading/withdraw/{tradeId}/cancel. Requests cancellation of every still-cancellable item in one of your own self-trade buys, rather than one item at a time — a single call replaces a loop over POST /secure/buy/{tradeId}/items/{itemId}/cancel.
Authentication: Merchant API Key (api-key header)
Scope: CORE_ACCESS
CS2 (Assetpay) items only. Rust buys and autoseller-sourced items have no supplier cancel API. If every item in the trade is in one of those lanes the call fails with
TRADE_CANCEL_UNSUPPORTED (44); if only some are, they are simply left out of the result. Only self-trade buys (source: "self") are cancellable through this endpoint.Request
Path Parameters
Best effort, not all-or-nothing
The supplier decides which items still qualify, so a partial result is still a200. Read the body, not the status code:
requested— how many items the supplier considered cancellable at allcancelled/failed— how those splititems[]— one row per item the supplier reported on
items[] at all. An item must also be at least 30 minutes old and not yet terminal; younger items come back as failed with reason: "TRADE_CANCEL_TOO_SOON".
Response
A
cancelled row only confirms the marketplace accepted the cancellation. AssetPay does not change item state inline — the refund and the transition to canceled arrive asynchronously through the standard trade.* callback. Poll GET /secure/trades/{tradeId} or rely on callbacks for the final state.
A cancel lands on
canceled, not reverted. reverted is for a delivered item that came back afterwards.