Appearance
Get Prices
POST /api/v1/merchant/get-prices
Fetches best provider prices for items by market hash name — no Steam inventory lookup required. Used in the hash-name integration flow as the first step before creating a deposit.
By default, this endpoint also creates a draft trade record (status: new) that locks in the winning provider for 5 minutes. You then commit the trade with Create Deposit by Hash Name using the returned id.
Request
Headers
| Header | Required | Description |
|---|---|---|
X-Api-Key | ✅ | Your merchant API key |
Content-Type | ✅ | application/json |
Body
| Parameter | Type | Required | Description |
|---|---|---|---|
game | string | ✅ | Game code: csgo, rust, dota2, tf2 |
marketHashNames | string[] | ✅ | Item market hash names. Min 1, max 2000 entries |
no_deposit_intent | boolean | — | When true, only fetches prices and does not create a trade record. Default false |
Response
json
{
"success": true,
"message": "Prices fetched successfully",
"data": {
"id": 742,
"total": 2,
"sum": 45.50,
"items": [
{
"name": "AK-47 | Redline (Field-Tested)",
"price": 22.75,
"originalPrice": 23.10
},
{
"name": "AWP | Asiimov (Field-Tested)",
"price": 22.75,
"originalPrice": 23.10
}
]
}
}Response Fields
| Field | Type | Description |
|---|---|---|
id | integer | Internal trade ID — pass to create-deposit-by-hash-name. Omitted when no_deposit_intent=true |
total | integer | Number of priced items returned |
sum | number | Total of all price values (USD) |
items | array | Priced items |
items[].name | string | Market hash name (echoed) |
items[].price | number | Final price after multipliers (USD) — what the merchant will pay out |
items[].originalPrice | number | Provider's raw price before multipliers (USD) |
INFO
The id field is the trade ID. When you call create-deposit-by-hash-name, you must reuse this id and supply your own merchant_tx_id at that step (it is not captured here).
Quote validity
The trade record is valid for 5 minutes. If you call create-deposit-by-hash-name after that window, the request will fail with an inventory_reload validation error and you must call get-prices again.
no_deposit_intent
Use no_deposit_intent: true for price discovery (e.g., showing a quote on your UI before the user commits). No trade record is created and no id is returned. When you're ready to actually deposit, call get-prices again with no_deposit_intent: false (or omit the field) to lock in the price.
Provider Selection
Providers are filtered automatically by:
- Deposit toggle — only providers with deposits enabled
- Circuit breaker — providers currently failing are skipped
- Merchant exclusions — providers you have disabled on your account
The best price across remaining providers wins, then DB-configured multipliers are applied.
Empty Inventory
If no providers can price the requested items, the trade record (if any) is automatically deleted and the response returns total: 0, sum: 0, items: null. No id is included.
Example
bash
curl -X POST https://api.skinslink.com/api/v1/merchant/get-prices \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"game": "csgo",
"marketHashNames": [
"AK-47 | Redline (Field-Tested)",
"AWP | Asiimov (Field-Tested)"
]
}'Price-only quote (no trade record)
bash
curl -X POST https://api.skinslink.com/api/v1/merchant/get-prices \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"game": "csgo",
"marketHashNames": ["AK-47 | Redline (Field-Tested)"],
"no_deposit_intent": true
}'Errors
| Status | Message | Cause |
|---|---|---|
400 | invalid request body | Malformed JSON |
400 | validation error | Missing or invalid fields (see data array — e.g. marketHashNames exceeds 2000, game not in allowed set) |
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 | IP not whitelisted: <ip> | Request IP not in merchant's allowed list |
408 | timeout error | Upstream pricing service timed out — retry |
500 | integration service error | Inventory service returned a 5xx error — retry |
500 | internal error | Unexpected server error — retry |
502 | bad gateway | Upstream service unreachable — retry |
→ For domain-specific validation codes, see Errors.
