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 fullTrade 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.
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
isInstanton CS2: without it, the wholetotalPricestays inpendingCredit. - 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 asPOST /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: