Skip to content

Skinslink API — LLM Reference

Single-page API reference optimized for LLMs, AI agents, and code generation tools. For full interactive docs, see the API Reference.

Overview

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


Endpoints

POST /merchant/create-intent

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):

FieldTypeRequiredDescription
merchant_tx_idstringyesYour unique order ID
gamestringnocsgo, rust, dota2, tf2
partnerintegernoSteam trade partner ID
tokenstringnoSteam trade token
result_urlstringnoWebhook URL override for this deposit
success_urlstringnoRedirect URL on success
fail_urlstringnoRedirect URL on failure
custom_currencystringnoCurrency code (1–4 chars). Requires all 3 currency fields
custom_currency_multipliernumbernoMultiplier (0.5–2.0)
custom_currency_ratenumbernoExchange rate (≥ 0.1)

Response data: { "id": int, "merchant_tx_id": string, "url": string }

Example:

bash
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"}'

POST /merchant/inventory

Fetches a user's Steam inventory with real-time pricing.

Request body (JSON):

FieldTypeRequiredDescription
gamestringyescsgo, rust, dota2, tf2
partnerintegeryesSteam trade partner ID
tokenstringyesSteam trade token (exactly 8 characters)

Response data:

json
{
  "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:

  • Cached responses: ~100–200ms. Fresh fetch: ~1–4s.
  • Prices are point-in-time; items are re-priced at deposit creation.
  • Use items[].id as asset_ids in create-deposit.

Example:

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"}'

POST /merchant/create-deposit

Creates a deposit with selected Steam items. Returns trade offer details.

Request body (JSON):

FieldTypeRequiredDescription
merchant_tx_idstringyesYour unique order ID
gamestringyescsgo, rust, dota2, tf2
partnerintegeryesSteam trade partner ID
tokenstringyesSteam trade token
asset_idsstring[]yesItem IDs from inventory response
result_urlstringnoWebhook URL override for this deposit
success_urlstringnoRedirect URL on success
fail_urlstringnoRedirect URL on failure
custom_currencystringnoCurrency code (1–4 chars). Requires all 3 currency fields
custom_currency_multipliernumbernoMultiplier (0.5–2.0)
custom_currency_ratenumbernoExchange rate (≥ 0.1)

Response data:

json
{
  "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:

  • Status is 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.
  • Custom currency fields only present if provided in request.

Example:

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-123","game":"csgo","partner":378049039,"token":"qPFEAtZR","asset_ids":["38029384123","38029384124"]}'

GET /merchant/deposit/status

Retrieves current status of a deposit.

Query parameters:

FieldTypeRequiredDescription
idintegerone requiredInternal trade ID
merchant_tx_idstringone requiredYour order ID

At least one of id or merchant_tx_id must be provided.

Response data:

json
{
  "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:

  • Custom currency fields only included when status is hold or completed.
  • For real-time updates, use webhooks instead of polling.

Example:

bash
curl "https://api.skinslink.com/api/v1/merchant/deposit/status?merchant_tx_id=order-123" \
  -H "X-Api-Key: your-api-key"

Trade Status Machine

new → pending → active → completed
 |       |        |
 |       |        ├→ hold → completed
 |       |        |           |
 |       |        |           └→ reverted
 |       |        ├→ failed
 |       |        └→ canceled
 |       ├→ failed
 |       └→ canceled
 └→ canceled
StatusDescriptionTerminal
newDeposit created, not yet processedno
pendingTrade offer sent, waiting for userno
activeUser accepted, being processedno
holdItems on Steam 7-day trade holdno
completedTrade successful, items receivedyes
failedTrade failedyes
canceledTrade canceledyes
revertedHeld trade reversedyes

Webhooks

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:

json
{
  "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 ) )
  • Custom currency fields only present on hold/completed webhooks.
  • Respond 200 OK quickly; process asynchronously.
  • Retries with exponential backoff on non-2xx responses.
  • Deduplicate using merchant_tx_id + status.

Error Handling

Error response: { "success": false, "message": "error description" }

Validation errors include field details:

json
{
  "success": false,
  "message": "validation error",
  "data": [
    { "field": "InventoryRequest.game", "code": "required", "message": "game is a required field" }
  ]
}
HTTP CodeMeaning
400Bad request / validation error
401Missing or invalid API key
403Merchant disabled or IP not whitelisted
404Resource not found
408Timeout (retry)
409Duplicate merchant_tx_id
500Internal error (retry)
502Upstream service error (retry)

Integration Flows

Flow 1: Redirect (with UI)

  1. POST /merchant/create-intent → get url
  2. Redirect user to url
  3. User selects items and confirms on Skinslink's page
  4. Receive webhook with final status

Flow 2: API-only (without UI)

  1. POST /merchant/inventory → get items with prices
  2. User selects items on your UI
  3. POST /merchant/create-deposit with selected asset_ids → get trade offer info
  4. User accepts Steam trade offer
  5. Receive webhook with final status
  6. Optionally poll GET /merchant/deposit/status for real-time tracking

Quick Reference

ActionMethodEndpoint
Create intent (redirect flow)POST/merchant/create-intent
Get inventoryPOST/merchant/inventory
Create deposit (API flow)POST/merchant/create-deposit
Check statusGET/merchant/deposit/status

Auth header: X-Api-Key: your-api-key

Games: csgo, rust, dota2, tf2