API

Withdrawing to Steam

Move items from your backpack into your Steam inventory.

Open raw markdownWhole API docs, for pasting into AI assistants

Items you buy land in your on-site backpack. Withdrawing sends them to Steam as a trade offer from one of our bots.

Before your first withdrawal

Your account needs a Steam trade URL set, on the account the items are going to. The API rejects a trade URL belonging to a different Steam account, so this is a one-time setup step on the website.

Without it you get TRADE_URL_NOT_SET or STEAM_ID_NOT_SET.

1. List your backpack

GET /public/v1/backpack returns what you own, paginated:

curl "https://api.cs.deals/public/v1/backpack?page=1&limit=50" \
  -H "Authorization: Bearer csd_..."

Each row has an id, the backpack item id, which is what you withdraw with. It is not the listing id and not the Steam asset id.

2. Request the withdrawal

POST /public/v1/withdraw:

curl -X POST https://api.cs.deals/public/v1/withdraw \
  -H "Authorization: Bearer csd_..." \
  -H "Content-Type: application/json" \
  -d '{ "items": [{ "id": 77, "amount": 1 }] }'

Items are held by different bots, so one request can become several trade offers, one per bot. That's normal and invisible apart from receiving more than one offer. The response's withdraw_ids carries one id per offer created.

3. Accept the offer on Steam

GET /public/v1/trades tracks them. Each trade carries a steam_offer_id, a status and its items. The offer arrives from a CS Deals bot; accept it in Steam as you would any trade.

If you decline or let an offer expire, the items go back to your backpack automatically.

Limits

LimitValue
Items per withdrawal50
Concurrent active trades15
Value per withdrawalyour tier's per-transaction cap
Value per rolling 24 hoursyour tier's daily cap

Withdrawal value caps are set per account by tier. Crypto, bank and skin withdrawals all draw from the same 24-hour bucket. Exceeding them returns WITHDRAW_LIMIT_EXCEEDED or WITHDRAW_DAILY_LIMIT_EXCEEDED, both with the limit in data; the daily one also includes your current usage as used. WITHDRAW_DISABLED means withdrawals are not enabled on the account at all. Contact support.

Errors worth handling

CodeMeaning
ITEM_NOT_OWNEDA backpack item id isn't yours, or is already withdrawing.
INSUFFICIENT_ITEM_AMOUNTYou asked for more copies than you hold.
ITEM_TRADE_LOCKEDStill inside Steam's trade hold.
ACTIVE_TRADE_LIMIT15 trades already in flight. Wait for one to settle.
WITHDRAW_ITEM_LIMITMore than 50 items in the request. Split it into smaller withdrawals.
BOT_UNAVAILABLEThe holding bot is temporarily unavailable. data.itemIds says which.
TRADING_WITHDRAW_DISABLEDWithdrawals are paused site-wide. Retry later.