{"openapi":"3.1.0","info":{"title":"Trade Desk partner API","version":"1.1.0","description":"Use an account key from your server to quote, trade, and withdraw settled funds. New in v1.1: merchants can authorize their key to pay customer wallets directly. Trade submission and withdrawals require the corresponding live permissions."},"externalDocs":{"description":"TradeDesk integration guide","url":"https://tradedesk.click/docs"},"servers":[{"url":"/api/test/v1","description":"Test with synthetic records"},{"url":"/api/v1","description":"Live"}],"security":[{"partnerKey":[]}],"paths":{"/prices":{"post":{"operationId":"prices","summary":"Look up deposit prices","description":"Search with offset and limit, or send up to 100 exact names and phases in items. Prices are indicative USD cents at the account’s rate. Reuse version with the same query to check for changes. Account limit: 30 requests per minute.","parameters":[],"responses":{"200":{"description":"Current result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Prices"},"example":{"game":"730","currency":"USD","stale":false,"version":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","items":[{"name":"AK-47 | Redline (Field-Tested)","phase":null,"priceCents":1000,"available":true}],"total":1,"nextOffset":null}}}},"400":{"description":"Invalid request fields or request identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Key is invalid, revoked or unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, account policy or rollout stage prevents access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or account resource is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method is unsupported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Requested terms conflict with account, asset, quote, payout or replay state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"JSON content type required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests or simultaneous operations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Delay in seconds"}}},"503":{"description":"Service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceRequest"},"example":{"search":"Redline","limit":10}}}}}},"/inventory":{"post":{"operationId":"inventory","summary":"Load an inventory","description":"Supply the customer’s Steam trade URL. Item IDs belong to this inventory. Choose available items for a quote. Account limit: 4 requests per minute.","parameters":[],"responses":{"200":{"description":"Current result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Inventory"},"example":{"inventoryId":"10000000-0000-4000-8000-000000000001","steamId":"76561197960265729","expiresAt":"2026-11-10T12:30:00.000Z","currency":"USD","items":[{"name":"AK-47 | Redline (Field-Tested)","phase":null,"priceCents":1000,"available":true,"id":"asset:730:1001","assetId":"1001"}]}}}},"400":{"description":"Invalid request fields or request identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Key is invalid, revoked or unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, account policy or rollout stage prevents access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or account resource is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method is unsupported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Requested terms conflict with account, asset, quote, payout or replay state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"JSON content type required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests or simultaneous operations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Delay in seconds"}}},"503":{"description":"Service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryRequest"},"example":{"tradeUrl":"https://steamcommunity.com/tradeoffer/new/?partner=1&token=PREVIEW1","game":"730"}}}}}},"/quotes":{"post":{"operationId":"quote","summary":"Review an offer","description":"Use the inventoryId you received and select 1–50 different item IDs from that inventory. Review the quoted items and total with the seller before submission. Set autoCancelMinutes (5–120, default 120) for the Steam offer. The quote review deadline is expiresAt. Account limit: 12 requests per minute.","parameters":[],"responses":{"200":{"description":"Current result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"},"example":{"quoteId":"20000000-0000-4000-8000-000000000002","expiresAt":"2026-11-10T12:30:00.000Z","currency":"USD","totalCents":1000,"items":[{"name":"AK-47 | Redline (Field-Tested)","phase":null,"priceCents":1000,"available":true,"id":"asset:730:1001","assetId":"1001"}],"autoCancelMinutes":120}}}},"400":{"description":"Invalid request fields or request identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Key is invalid, revoked or unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, account policy or rollout stage prevents access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or account resource is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method is unsupported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Requested terms conflict with account, asset, quote, payout or replay state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"JSON content type required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests or simultaneous operations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Delay in seconds"}}},"503":{"description":"Service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"},"example":{"inventoryId":"10000000-0000-4000-8000-000000000001","itemIds":["asset:730:1001"]}}}}}},"/trades":{"post":{"operationId":"send","summary":"Submit an offer","description":"Send the accepted quote using one UUID Idempotency-Key. Save the resulting trade ID, even when status is processing. Repeat an uncertain request with the original key and quote. Account limit: 6 requests per minute.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","format":"uuid"},"description":"Persist and reuse the same key for one logical request, including after a timeout or API key rotation."}],"responses":{"200":{"description":"Current result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Trade"},"example":{"id":"40000000-0000-4000-8000-000000000004","status":"awaiting_acceptance","createdAt":"2026-11-10T12:00:00.000Z","game":"730","steamId":"76561197960265729","currency":"USD","totalCents":1000,"legs":[{"status":"pending","itemIds":["asset:730:1001"],"totalCents":1000,"availableCreditCents":0,"pendingCreditCents":0,"steamOfferUrl":null}]}}}},"400":{"description":"Invalid request fields or request identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Key is invalid, revoked or unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, account policy or rollout stage prevents access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or account resource is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method is unsupported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Requested terms conflict with account, asset, quote, payout or replay state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"JSON content type required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests or simultaneous operations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Delay in seconds"}}},"503":{"description":"Service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeRequest"},"example":{"quoteId":"20000000-0000-4000-8000-000000000002"}}}}}},"/trades/{id}":{"get":{"operationId":"tradeStatus","summary":"Read a trade","description":"Returns the current state and each split offer. Each leg shows the actual Steam link when available and the pending and available credits for its items. Account limit: 30 requests per minute.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Current result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Trade"},"example":{"id":"40000000-0000-4000-8000-000000000004","status":"awaiting_acceptance","createdAt":"2026-11-10T12:00:00.000Z","game":"730","steamId":"76561197960265729","currency":"USD","totalCents":1000,"legs":[{"status":"pending","itemIds":["asset:730:1001"],"totalCents":1000,"availableCreditCents":0,"pendingCreditCents":0,"steamOfferUrl":null}]}}}},"400":{"description":"Invalid request fields or request identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Key is invalid, revoked or unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, account policy or rollout stage prevents access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or account resource is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method is unsupported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Requested terms conflict with account, asset, quote, payout or replay state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"JSON content type required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests or simultaneous operations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Delay in seconds"}}},"503":{"description":"Service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/balance":{"get":{"operationId":"balance","summary":"Read your balance","description":"Amounts are USD cents. availableCents is the balance eligible for withdrawal. Pending and reserved amounts are tracked separately. Account limit: 30 requests per minute.","parameters":[],"responses":{"200":{"description":"Current result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Balance"},"example":{"availableCents":10000,"pendingCents":0,"reservedCents":0,"currency":"USD"}}}},"400":{"description":"Invalid request fields or request identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Key is invalid, revoked or unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, account policy or rollout stage prevents access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or account resource is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method is unsupported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Requested terms conflict with account, asset, quote, payout or replay state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"JSON content type required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests or simultaneous operations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Delay in seconds"}}},"503":{"description":"Service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/withdrawals":{"post":{"operationId":"withdraw","summary":"Request a withdrawal","description":"Pay from your available balance. Omit address to use the key’s approved wallet for that token and chain. Include the customer’s address to pay them directly with withdrawals:customer permission. Withdrawal mode, limits and enabled currencies apply. Retry with the same Idempotency-Key and the same amount, token, chain and destination. Changing the recipient on a retry returns 409. Account limit: 6 requests per minute.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9_.:-]+$"},"description":"Persist and reuse the same key for one logical request, including after a timeout or API key rotation."}],"responses":{"200":{"description":"Current result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Withdrawal"},"example":{"id":"50000000-0000-4000-8000-000000000005","amountCents":2500,"token":"USDC","chain":"ETH","status":"pending","reserved":true,"createdAt":"2026-11-10T12:00:00.000Z","txHash":null}}}},"400":{"description":"Invalid request fields or request identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Key is invalid, revoked or unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, account policy or rollout stage prevents access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or account resource is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method is unsupported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Requested terms conflict with account, asset, quote, payout or replay state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"JSON content type required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests or simultaneous operations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Delay in seconds"}}},"503":{"description":"Service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawalRequest"},"examples":{"approvedWallet":{"summary":"Withdraw to the wallet approved on the key","value":{"amountCents":1000,"token":"USDC","chain":"ETH"}},"customerWallet":{"summary":"Pay a customer (sandbox example)","value":{"amountCents":2500,"token":"USDC","chain":"ETH","address":"0x1111111111111111111111111111111111111111"}}}}}}}},"/withdrawals/{id}":{"get":{"operationId":"payoutStatus","summary":"Read a withdrawal","description":"Read an API withdrawal owned by your account. Pending or processing can include a delayed payment under review. A reserved payment can still settle. Account limit: 30 requests per minute.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Current result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Withdrawal"},"example":{"id":"50000000-0000-4000-8000-000000000005","amountCents":2500,"token":"USDC","chain":"ETH","status":"pending","reserved":true,"createdAt":"2026-11-10T12:00:00.000Z","txHash":null}}}},"400":{"description":"Invalid request fields or request identity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Key is invalid, revoked or unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, account policy or rollout stage prevents access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Endpoint or account resource is unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method is unsupported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Requested terms conflict with account, asset, quote, payout or replay state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Request exceeds the size limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"JSON content type required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests or simultaneous operations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"Delay in seconds"}}},"503":{"description":"Service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"partnerKey":{"type":"http","scheme":"bearer"}},"schemas":{"PriceRequest":{"oneOf":[{"type":"object","properties":{"game":{"type":"string","enum":["730","252490"],"default":"730","description":"Steam app ID as a string. 730 is Counter-Strike 2 and 252490 is Rust."},"search":{"type":"string","maxLength":128},"offset":{"type":"integer","minimum":0,"maximum":200000},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50},"version":{"type":"string","pattern":"^[0-9a-f]{64}$"}},"required":[],"additionalProperties":false},{"type":"object","properties":{"game":{"type":"string","enum":["730","252490"],"default":"730","description":"Steam app ID as a string. 730 is Counter-Strike 2 and 252490 is Rust."},"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":512},"phase":{"enum":[null,"Phase 1","Phase 2","Phase 3","Phase 4","Ruby","Sapphire","Black Pearl","Emerald"],"description":"Optional CS2 finish phase for exact matches."}},"required":["name"],"additionalProperties":false},"minItems":1,"maxItems":100},"version":{"type":"string","pattern":"^[0-9a-f]{64}$"}},"required":["items"],"additionalProperties":false}]},"Prices":{"oneOf":[{"type":"object","properties":{"version":{"type":"string","pattern":"^[0-9a-f]{64}$"},"unchanged":{"const":true}},"required":["version","unchanged"],"additionalProperties":false},{"type":"object","properties":{"game":{"type":"string","enum":["730","252490"],"default":"730","description":"Steam app ID as a string. 730 is Counter-Strike 2 and 252490 is Rust."},"currency":{"type":"string","const":"USD"},"stale":{"type":"boolean"},"version":{"type":"string","pattern":"^[0-9a-f]{64}$"},"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":512},"phase":{"enum":[null,"Phase 1","Phase 2","Phase 3","Phase 4","Ruby","Sapphire","Black Pearl","Emerald"],"description":"Optional CS2 finish phase for exact matches."},"priceCents":{"type":["integer","null"],"minimum":0},"available":{"type":"boolean"}},"required":["name","phase","priceCents","available"],"additionalProperties":false},"minItems":0,"maxItems":100},"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"nextOffset":{"type":["integer","null"],"minimum":0}},"required":["game","currency","stale","version","items"],"additionalProperties":false}]},"InventoryRequest":{"type":"object","properties":{"tradeUrl":{"type":"string","format":"uri"},"game":{"type":"string","enum":["730","252490"],"default":"730","description":"Steam app ID as a string. 730 is Counter-Strike 2 and 252490 is Rust."}},"required":["tradeUrl"],"additionalProperties":false},"Item":{"type":"object","properties":{"id":{"type":"string"},"assetId":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":512},"phase":{"enum":[null,"Phase 1","Phase 2","Phase 3","Phase 4","Ruby","Sapphire","Black Pearl","Emerald"],"description":"Optional CS2 finish phase for exact matches."},"priceCents":{"type":["integer","null"],"minimum":0},"available":{"type":"boolean"}},"required":["id","assetId","name","phase","priceCents","available"],"additionalProperties":false},"Inventory":{"type":"object","properties":{"inventoryId":{"type":"string","format":"uuid"},"steamId":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"currency":{"type":"string","const":"USD"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Item"},"minItems":0,"maxItems":10000}},"required":["inventoryId","steamId","expiresAt","currency","items"],"additionalProperties":false},"QuoteRequest":{"type":"object","properties":{"inventoryId":{"type":"string","format":"uuid"},"itemIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":50,"uniqueItems":true},"autoCancelMinutes":{"type":"integer","minimum":5,"maximum":120,"default":120}},"required":["inventoryId","itemIds"],"additionalProperties":false},"Quote":{"type":"object","properties":{"quoteId":{"type":"string","format":"uuid"},"expiresAt":{"type":"string","format":"date-time"},"currency":{"type":"string","const":"USD"},"totalCents":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"array","items":{"$ref":"#/components/schemas/Item"},"minItems":1,"maxItems":50},"autoCancelMinutes":{"type":"integer","minimum":5,"maximum":120}},"required":["quoteId","expiresAt","currency","totalCents","items","autoCancelMinutes"],"additionalProperties":false},"TradeRequest":{"type":"object","properties":{"quoteId":{"type":"string","format":"uuid"}},"required":["quoteId"],"additionalProperties":false},"Leg":{"type":"object","properties":{"status":{"enum":["initiated","pending","hold","completed","failed","canceled","declined","reverted"]},"itemIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":50},"totalCents":{"type":"integer","minimum":0,"maximum":9007199254740991},"availableCreditCents":{"type":"integer","minimum":0,"maximum":9007199254740991},"pendingCreditCents":{"type":"integer","minimum":0,"maximum":9007199254740991},"steamOfferUrl":{"type":["string","null"],"format":"uri"}},"required":["status","itemIds","totalCents","availableCreditCents","pendingCreditCents","steamOfferUrl"],"additionalProperties":false},"Trade":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"enum":["processing","awaiting_acceptance","on_hold","completed","partially_completed","failed","canceled","declined","reverted"]},"createdAt":{"type":"string","format":"date-time"},"game":{"type":"string","enum":["730","252490"],"default":"730","description":"Steam app ID as a string. 730 is Counter-Strike 2 and 252490 is Rust."},"steamId":{"type":"string"},"currency":{"type":"string","const":"USD"},"totalCents":{"type":"integer","minimum":0,"maximum":9007199254740991},"legs":{"type":"array","items":{"$ref":"#/components/schemas/Leg"},"minItems":0,"maxItems":50}},"required":["id","status","createdAt","game","steamId","currency","totalCents","legs"],"additionalProperties":false},"Balance":{"type":"object","properties":{"availableCents":{"type":"integer"},"pendingCents":{"type":"integer"},"reservedCents":{"type":"integer"},"currency":{"type":"string","const":"USD"}},"required":["availableCents","pendingCents","reservedCents","currency"],"additionalProperties":false},"WithdrawalRequest":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":1000,"maximum":100000000},"token":{"enum":["USDT","USDC"]},"chain":{"enum":["ETH","TRON"]},"address":{"type":"string","minLength":34,"maxLength":42,"description":"Optional customer wallet address. Live requests with this field require withdrawals:customer permission. Use a nonzero Ethereum address (0x plus 40 hex digits, checksummed if mixed case) or a valid Tron Base58Check address for the requested chain. Omitting address uses the key’s approved wallet for the same token and chain."}},"required":["amountCents","token","chain"],"additionalProperties":false,"if":{"properties":{"token":{"const":"USDC"}}},"then":{"properties":{"chain":{"const":"ETH"}}}},"Withdrawal":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"amountCents":{"type":"integer","minimum":0,"maximum":9007199254740991},"token":{"enum":["USDT","USDC"]},"chain":{"enum":["ETH","TRON"]},"status":{"enum":["pending","processing","paid","cancelled"]},"reserved":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"txHash":{"type":["string","null"]}},"required":["id","amountCents","token","chain","status","reserved","createdAt","txHash"],"additionalProperties":false},"UpdateEvent":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"enum":["trade.updated","withdrawal.updated"]},"resourceId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","type","resourceId","createdAt"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}},"webhooks":{"resource.updated":{"post":{"summary":"A trade or withdrawal changed","security":[],"parameters":[{"name":"X-Trade-Desk-Timestamp","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9]+$"}},{"name":"X-Trade-Desk-Signature","in":"header","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{64}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEvent"}}}},"responses":{"2XX":{"description":"Event accepted"}}}},"endpoint.verify":{"post":{"summary":"Confirm control of a callback address","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"const":"endpoint.verify"},"challenge":{"type":"string"}},"required":["type","challenge"],"additionalProperties":false}}}},"responses":{"2XX":{"description":"Echo the challenge exactly","headers":{"X-Trade-Desk-Challenge":{"schema":{"type":"string"}}}}}}}}}