Appearance
Get Prices
POST /api/v1/merchant/get-prices
Fetches best 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 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 | 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.
Empty Inventory
If we can't 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.
