Deliver CS2 skin withdrawals through one API
Deliver CS2 skins to your users' Steam accounts from your own website or app. Read the available catalog, submit an order with the expected price and recipient's trade URL, then follow delivery through signed webhooks or order lookup.
- 01Your SkinsNode balance
- 02Catalog order & delivery
- 03User's Steam inventory
How the integration works
Choose an available skin
Load your account's catalog and retain the exact item ID and price. Where provided, use float, stickers and phase to show the user which asset they will receive.
Read the API reference →Submit a withdrawal order
Send the catalog item ID, expected price, your stable order ID, callback URL and recipient's Steam trade URL. A 202 response means accepted for processing; it does not confirm delivery.
Read the API reference →Confirm the delivery outcome
Verify order.updated webhook signatures and process events idempotently. Use order lookup to reconcile delayed callbacks or uncertain results instead of creating a replacement order.
Read the API reference →Skin delivery for platforms
Use withdrawals for case-opening payouts, marketplace orders, tournament prizes or loyalty rewards. Your product selects the recipient and skin; SkinsNode handles the delivery workflow. The recipient still needs to accept the Steam trade.
Read the withdrawal integration guide →Pricing and balance
There are no monthly fees. Withdrawals use your prepaid SkinsNode balance and are charged when completed. Send the current catalog price as expectedPrice, in USD cents. Refresh unavailable items or changed prices before asking the user to accept a new selection.
Read your available balance →Failed orders and uncertain requests
A failed withdrawal releases the skin and is not charged. A timeout does not prove failure: the order may already have been accepted. Reuse your original order identity and inspect its state. Handle delivery failures and reversals explicitly in your application.
Handle withdrawal errors →Fund delivery with settled skin deposits
Deposits and withdrawals share one client balance. If your platform accepts skins from users, their settled deposit value can fund subsequent withdrawals. Pending deposits are not spendable, so check available balance before submitting orders.
Explore the CS2 skin deposit API →Example: create a skin withdrawal
Illustrative request and response. Replace the sample credentials, IDs and trade URL with your own values. Keep credentials on your backend and confirm account access during onboarding.
curl -X POST https://api.skinsnode.com/v1/orders \
-H "x-client-id: YOUR_CLIENT_ID" \
-H "x-client-secret: YOUR_CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{
"catalogItemId": "8d15e82b-21fe-4ec1-a37f-1e2e5edeb1fd",
"expectedPrice": 1840,
"externalId": "order_100042",
"webhookUrl": "https://store.example/webhooks/orders",
"tradeUrl": "https://steamcommunity.com/tradeoffer/new/?partner=123&token=abc"
}'202 Accepted
{
"externalId": "order_100042",
"status": "accepted",
"acceptedAt": "2026-04-25T12:30:00.000Z"
}This response acknowledges processing. Use signed events and lookup to confirm the final outcome.
Continue to the complete integration guide →