Appearance
Integration without UI (API Flow)
Full control over the deposit experience. Fetch inventory, display it on your site, and submit deposits directly.
Flow Overview
Your Platform Skinslink
───────────── ─────────
│ │
│ 1. POST /merchant/inventory │
│ ──────────────────────────────► │
│ │
│ { items[], total, sum } │
│ ◄────────────────────────────── │
│ │
│ Display items to user, │
│ user selects items │
│ │
│ 2. POST /merchant/create-deposit
│ ──────────────────────────────► │
│ │
│ { id, status, trade offer } │
│ ◄────────────────────────────── │
│ │
│ 3. Webhook: trade status │
│ ◄────────────────────────────── │Step 1: Fetch User's Inventory
You need the user's Steam trade URL components: partner (trade partner ID) and token (trade token).
Parsing Steam Trade URLs
A Steam trade URL looks like:
https://steamcommunity.com/tradeoffer/new/?partner=378049039&token=qPFEAtZRExtract partner and token from the query parameters.
bash
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"
}'Response:
json
{
"success": true,
"message": "Inventory fetched successfully",
"data": {
"items": [
{
"id": "38029384123",
"name": "AK-47 | Redline (Field-Tested)",
"price": 12.45,
"image_url": "https://community.cloudflare.steamstatic.com/...",
"exterior": "Field-Tested",
"rarity": "Classified",
"rarity_color": "#d32ce6"
},
{
"id": "38029384124",
"name": "AWP | Asiimov (Battle-Scarred)",
"price": 23.80,
"image_url": "https://community.cloudflare.steamstatic.com/...",
"exterior": "Battle-Scarred",
"rarity": "Covert",
"rarity_color": "#eb4b4b"
}
],
"total": 2,
"sum": 36.25,
"game": "csgo"
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
game | string | ✅ | Game code: csgo, rust, dota2, tf2 |
partner | integer | ✅ | Steam trade partner ID |
token | string | ✅ | Steam trade token (exactly 8 characters) |
Performance Note
Inventory fetching involves real-time pricing and may take 1–4 seconds. Cache results on your side when possible.
Step 2: Create Deposit
After the user selects items, submit the deposit with the selected asset_ids:
bash
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-12345",
"game": "csgo",
"partner": 378049039,
"token": "qPFEAtZR",
"asset_ids": ["38029384123", "38029384124"]
}'Response:
json
{
"success": true,
"message": "Deposit processing with selected items",
"data": {
"id": 42,
"merchant_tx_id": "order-12345",
"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"
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
merchant_tx_id | string | ✅ | Your unique transaction ID |
game | string | ✅ | Game code: csgo, rust, dota2, tf2 |
partner | integer | ✅ | Steam trade partner ID |
token | string | ✅ | Steam trade token |
asset_ids | string[] | ✅ | Array of item IDs from the inventory response |
result_url | string | — | Webhook URL — overrides your merchant-level webhook URL for this deposit |
success_url | string | — | URL for successful trades |
fail_url | string | — | URL for failed trades |
custom_currency | string | — | Custom currency code (1–4 chars). Requires all 3 currency fields |
custom_currency_multiplier | number | — | Currency multiplier (0.5–2.0) |
custom_currency_rate | number | — | Currency exchange rate (≥ 0.1) |
Step 3: User Accepts Trade Offer
After creating the deposit, a Steam trade offer is sent to the user. The response includes:
bot_name/bot_steam_id— Which bot sent the offertrade_offer_id— Steam trade offer IDtrade_offer_expiry_at— When the offer expires
Display this information to the user so they can accept the trade in Steam.
Step 4: Track Deposit Status (Optional)
You can track the deposit in two ways:
Option A: Webhooks (recommended)
Listen for status updates via webhooks — Skinslink will POST to your result_url or merchant webhook URL when the trade status changes.
→ See Webhooks for payload format and setup.
Option B: Poll the status endpoint
bash
curl "https://api.skinslink.com/api/v1/merchant/deposit/status?merchant_tx_id=order-12345" \
-H "X-Api-Key: your-api-key"→ See Deposit Status for full response format.
Deposit Status Page
Each deposit has a hosted status page that you can redirect users to:
https://skinslink.com/deposit/{tx_id}The tx_id is the internal transaction ID (not your merchant_tx_id). You can get it from the url field returned by Create Intent, or construct it from the deposit status response.
This page shows the user the current trade status, bot info, and trade offer details — useful if you want to let users track their deposit without building your own status UI.
Trade Statuses
| Status | Description |
|---|---|
new | Deposit created, not yet processed |
pending | Trade offer sent, waiting for user to accept |
active | Trade offer accepted by user, being processed |
hold | Items on Steam trade hold (7-day hold) |
completed | Trade successful, items received |
failed | Trade failed (provider error, user declined, items unavailable) |
canceled | Trade canceled by user or system |
reverted | Previously held trade was reversed |
