Skip to main content
Merchant-facing equivalent of POST /client/trading/deposit. Initiates a deposit trade where AssetPay receives the skins via Steam trade offer and credits the merchant’s USD wallet. There is no end-user: the trade URL is supplied per-request. Authentication: Merchant API Key (api-key header) Scope: CORE_ACCESS

Request

Body Parameters

Response

Returns a full Trade object with source: "self". Self-trades skip risk evaluation and carry no collateral. preCredit equals totalPrice when isInstant is true or the game is Rust. Otherwise preCredit is 0 and pendingCredit equals totalPrice until the trade completes.
A basket can be split into several trades, one Steam trade offer each. The response is then the primary trade, with the others in relatedTrades (each a full Trade). Your externalId is set on the primary trade only.

Differences from /client/trading/deposit

  • Risk evaluation is skipped and there is no collateral. Instant credit still follows isInstant on CS2: without it, the whole totalPrice stays in pendingCredit.
  • The per-client active/rolling deposit guard does not run on this route. Only the per-merchant tier throttle limits self-trades.
  • The trade is persisted with source: "self", and the API response carries that field so you can distinguish self-trades from client trades.
  • Webhooks still fire on every state change.

Rate Limits

Errors

Same set as POST /client/trading/deposit minus TOO_MANY_ACTIVE_TRADES (per-client guard never runs). RATE_LIMITED (1005) can still fire if the merchant-tier limits above are exceeded. A malformed tradeUrl fails with VALIDATION_FAILED (1001); INVALID_TRADEURL (13) means Steam rejected a well-formed one. Codes worth handling explicitly: