Appearance
Single-page API reference optimized for LLMs, AI agents, and code generation tools. For full interactive docs, see the API Reference.
Skinslink is a Steam skin deposit aggregator. Merchants integrate with Skinslink to accept Steam item deposits from users. The API handles inventory pricing, deposit creation, trade offer management, and status tracking via webhooks.
Base URL: https://api.skinslink.com/api/v1
Auth: All requests require X-Api-Key: <your-api-key> header.
Response envelope: Every response follows { "success": bool, "message": string, "data": ... }.
Supported games: csgo (CS2), rust, dota2, tf2
Creates a deposit intent for the redirect flow. Returns a URL where the user completes the deposit on Skinslink's hosted page.
Request body (JSON):
| Field | Type | Required | Description |
|---|---|---|---|
merchant_tx_id | string | yes | Your unique order ID |
game | string | no | csgo, rust, dota2, tf2 |
partner | integer | no | Steam trade partner ID |
token | string | no | Steam trade token |
result_url | string | no | Webhook URL override for this deposit |
success_url | string | no | Redirect URL on success |
fail_url | string | no | Redirect URL on failure |
custom_currency | string | no | Currency code (1–4 chars). Requires all 3 currency fields |
custom_currency_multiplier | number | no | Multiplier (0.5–2.0) |
custom_currency_rate | number | no | Exchange rate (≥ 0.1) |
Response data: { "id": int, "merchant_tx_id": string, "url": string }
Example:
curl -X POST https://api.skinslink.com/api/v1/merchant/create-intent \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"merchant_tx_id":"order-123","game":"csgo","partner":378049039,"token":"qPFEAtZR"}'Fetches a user's Steam inventory with real-time pricing.
Request body (JSON):
| Field | Type | Required | Description |
|---|---|---|---|
game | string | yes | csgo, rust, dota2, tf2 |
partner | integer | yes | Steam trade partner ID |
token | string | yes | Steam trade token (exactly 8 characters) |
Response data:
{
"items": [
{
"id": "38029384123",
"name": "AK-47 | Redline (Field-Tested)",
"price": 12.45,
"image_url": "https://community.cloudflare.steamstatic.com/economy/image/...",
"exterior": "Field-Tested",
"rarity": "Classified",
"rarity_color": "#d32ce6"
}
],
"total": 47,
"sum": 284.90,
"game": "csgo"
}Notes:
items[].id as asset_ids in create-deposit.Example:
curl -X POST https://api.skinslink.com/api/v1/merchant/inventory \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"game":"csgo","partner":378049039,"token":"qPFEAtZR"}'Creates a deposit with selected Steam items. Returns trade offer details.
Request body (JSON):
| Field | Type | Required | Description |
|---|---|---|---|
merchant_tx_id | string | yes | Your unique order ID |
game | string | yes | csgo, rust, dota2, tf2 |
partner | integer | yes | Steam trade partner ID |
token | string | yes | Steam trade token |
asset_ids | string[] | yes | Item IDs from inventory response |
result_url | string | no | Webhook URL override for this deposit |
success_url | string | no | Redirect URL on success |
fail_url | string | no | Redirect URL on failure |
custom_currency | string | no | Currency code (1–4 chars). Requires all 3 currency fields |
custom_currency_multiplier | number | no | Multiplier (0.5–2.0) |
custom_currency_rate | number | no | Exchange rate (≥ 0.1) |
Response data:
{
"id": 42,
"merchant_tx_id": "order-123",
"status": "active",
"amount": 36.25,
"bot_name": "Skinslink Bot #3",
"bot_steam_id": 76561199012345678,
"trade_offer_id": "6912345678",
"trade_offer_expiry_at": "2026-02-16T12:30:00Z",
"custom_currency": "EUR",
"custom_currency_multiplier": 1.0,
"custom_currency_rate": 0.92,
"custom_currency_sum": 33.35
}Notes:
active on success, failed on provider error.bot_name, bot_steam_id, trade_offer_id may be null if the bot hasn't assigned yet.Example:
curl -X POST https://api.skinslink.com/api/v1/merchant/create-deposit \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"merchant_tx_id":"order-123","game":"csgo","partner":378049039,"token":"qPFEAtZR","asset_ids":["38029384123","38029384124"]}'Retrieves current status of a deposit.
Query parameters:
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | one required | Internal trade ID |
merchant_tx_id | string | one required | Your order ID |
At least one of id or merchant_tx_id must be provided.
Response data:
{
"id": 42,
"merchant_tx_id": "order-123",
"status": "completed",
"bot_steam_id": 76561199012345678,
"bot_name": "Skinslink Bot #3",
"trade_offer_id": "6912345678",
"trade_offer_expiry_at": "2026-02-16T12:30:00Z",
"custom_currency": "EUR",
"custom_currency_multiplier": 1.0,
"custom_currency_rate": 0.92,
"custom_currency_sum": 33.35
}Notes:
hold or completed.Example:
curl "https://api.skinslink.com/api/v1/merchant/deposit/status?merchant_tx_id=order-123" \
-H "X-Api-Key: your-api-key"new → pending → active → completed
| | |
| | ├→ hold → completed
| | | |
| | | └→ reverted
| | ├→ failed
| | └→ canceled
| ├→ failed
| └→ canceled
└→ canceled| Status | Description | Terminal |
|---|---|---|
new | Deposit created, not yet processed | no |
pending | Trade offer sent, waiting for user | no |
active | User accepted, being processed | no |
hold | Items on Steam 7-day trade hold | no |
completed | Trade successful, items received | yes |
failed | Trade failed | yes |
canceled | Trade canceled | yes |
reverted | Held trade reversed | yes |
Skinslink sends POST requests to your webhook URL when trade statuses change.
Webhook-triggering statuses: hold, completed, failed, canceled, reverted
Statuses that do NOT trigger webhooks: new, pending, active
Payload:
{
"sign": "b64EncodedSHA256Signature==",
"status": "completed",
"trade_id": 178,
"trade_date": "2026-02-16T12:00:00Z",
"merchant_tx_id": "order-123",
"steam_id": "76561198338314767",
"offer_id": "6912345678",
"amount": 36.25,
"amount_currency": "usd",
"custom_currency": "EUR",
"custom_currency_multiplier": 1.0,
"custom_currency_rate": 0.92,
"custom_currency_sum": 33.35
}Signature verification:
sign = base64( sha256( merchant_tx_id + merchant_secret ) )hold/completed webhooks.200 OK quickly; process asynchronously.merchant_tx_id + status.Error response: { "success": false, "message": "error description" }
Validation errors include field details:
{
"success": false,
"message": "validation error",
"data": [
{ "field": "InventoryRequest.game", "code": "required", "message": "game is a required field" }
]
}| HTTP Code | Meaning |
|---|---|
| 400 | Bad request / validation error |
| 401 | Missing or invalid API key |
| 403 | Merchant disabled or IP not whitelisted |
| 404 | Resource not found |
| 408 | Timeout (retry) |
| 409 | Duplicate merchant_tx_id |
| 500 | Internal error (retry) |
| 502 | Upstream service error (retry) |
POST /merchant/create-intent → get urlurlPOST /merchant/inventory → get items with pricesPOST /merchant/create-deposit with selected asset_ids → get trade offer infoGET /merchant/deposit/status for real-time tracking| Action | Method | Endpoint |
|---|---|---|
| Create intent (redirect flow) | POST | /merchant/create-intent |
| Get inventory | POST | /merchant/inventory |
| Create deposit (API flow) | POST | /merchant/create-deposit |
| Check status | GET | /merchant/deposit/status |
Auth header: X-Api-Key: your-api-key
Games: csgo, rust, dota2, tf2