Appearance
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
| Header | Required | Description |
|---|---|---|
X-Api-Key | ✅ | Your merchant API key |
Content-Type | ✅ | application/json |
Body
| Parameter | Type | Required | Description |
|---|---|---|---|
merchant_tx_id | string | ✅ | Your unique transaction/order ID |
game | string | ✅ | Game code: csgo, rust, dota2, tf2 |
partner | integer | ✅ | Steam trade partner ID |
token | string | ✅ | Steam trade token |
asset_ids | string[] | ✅ | Item IDs from the inventory response |
result_url | string | — | Webhook URL — overrides your merchant-level webhook URL for this deposit (must be valid URL) |
success_url | string | — | Success redirect URL (must be valid URL) |
fail_url | string | — | Failure redirect URL (must be valid URL) |
custom_currency | string | — | Custom currency code (1–4 chars, e.g. BTC, EUR). Requires all 3 currency fields |
custom_currency_multiplier | number | — | Currency multiplier (0.5–2.0) |
custom_currency_rate | number | — | Currency 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
| Field | Type | Description |
|---|---|---|
id | integer | Internal trade ID |
merchant_tx_id | string | Your transaction ID (echoed back) |
status | string | Trade status (active on success, failed if provider error) |
amount | number | Total deposit amount (USD) |
bot_name | string | null | Name of the Steam bot sending the offer |
bot_steam_id | integer | null | Steam ID of the bot |
trade_offer_id | string | null | Steam trade offer ID |
trade_offer_expiry_at | string | null | ISO 8601 timestamp when the offer expires |
success_url | string | Success redirect URL (only present if provided in request) |
fail_url | string | Failure redirect URL (only present if provided in request) |
custom_currency | string | null | Custom currency code (only present if configured) |
custom_currency_multiplier | number | null | Currency multiplier |
custom_currency_rate | number | null | Currency exchange rate |
custom_currency_sum | number | null | Computed 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
- Show the trade offer info to the user (bot name, offer ID)
- User accepts the trade offer in Steam
- Listen for webhooks or poll
/merchant/deposit/statusfor updates
TIP
Store the trade_offer_expiry_at and remind users to accept before expiry. Expired offers are automatically canceled.
Errors
| Status | Message | Cause |
|---|---|---|
400 | invalid request body | Malformed JSON |
400 | validation error | Missing or invalid fields (see data array for details) |
401 | missing authorization header | X-Api-Key header not provided |
401 | invalid API key | API key not found or inactive |
403 | merchant account is disabled | Merchant account deactivated |
403 | invalid IP: <ip> | Request IP not in whitelist |
404 | not found error | Trade or items not found |
409 | already exist error | Duplicate merchant_tx_id |
500 | internal error | Something went wrong on our side |
