Skip to content

Create Deposit

POST /api/v1/merchant/create-deposit

Creates a deposit with specific Steam items. Used in the API-only integration flow after fetching inventory.

Request

Headers

HeaderRequiredDescription
X-Api-KeyYour merchant API key
Content-Typeapplication/json

Body

ParameterTypeRequiredDescription
merchant_tx_idstringYour unique transaction/order ID
gamestringGame code: csgo, rust, dota2, tf2
partnerintegerSteam trade partner ID
tokenstringSteam trade token
asset_idsstring[]Item IDs from the inventory response
result_urlstringWebhook URL — overrides your merchant-level webhook URL for this deposit (must be valid URL)
success_urlstringSuccess redirect URL (must be valid URL)
fail_urlstringFailure redirect URL (must be valid URL)
custom_currencystringCustom currency code (1–4 chars, e.g. BTC, EUR). Requires all 3 currency fields
custom_currency_multipliernumberCurrency multiplier (0.5–2.0)
custom_currency_ratenumberCurrency exchange rate (≥ 0.1)

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",
    "success_url": "https://yoursite.com/deposit/success",
    "fail_url": "https://yoursite.com/deposit/failed",
    "custom_currency": "EUR",
    "custom_currency_multiplier": 1.0,
    "custom_currency_rate": 0.92,
    "custom_currency_sum": 33.35
  }
}

Response Fields

FieldTypeDescription
idintegerInternal trade ID
merchant_tx_idstringYour transaction ID (echoed back)
statusstringTrade status (active on success, failed if provider error)
amountnumberTotal deposit amount (USD)
bot_namestring | nullName of the Steam bot sending the offer
bot_steam_idinteger | nullSteam ID of the bot
trade_offer_idstring | nullSteam trade offer ID
trade_offer_expiry_atstring | nullISO 8601 timestamp when the offer expires
success_urlstringSuccess redirect URL (only present if provided in request)
fail_urlstringFailure redirect URL (only present if provided in request)
custom_currencystring | nullCustom currency code (only present if configured)
custom_currency_multipliernumber | nullCurrency multiplier
custom_currency_ratenumber | nullCurrency exchange rate
custom_currency_sumnumber | nullComputed amount in custom currency (amount × rate × multiplier)

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

After Creating a Deposit

  1. Show the trade offer info to the user (bot name, offer ID)
  2. User accepts the trade offer in Steam
  3. Listen for webhooks or poll /merchant/deposit/status for updates

TIP

Store the trade_offer_expiry_at and remind users to accept before expiry. Expired offers are automatically canceled.

Errors

StatusMessageCause
400invalid request bodyMalformed JSON
400validation errorMissing or invalid fields (see data array for details)
401missing authorization headerX-Api-Key header not provided
401invalid API keyAPI key not found or inactive
403merchant account is disabledMerchant account deactivated
403invalid IP: <ip>Request IP not in whitelist
404not found errorTrade or items not found
409already exist errorDuplicate merchant_tx_id
500internal errorSomething went wrong on our side