Skip to content

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

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

Body

ParameterTypeRequiredDescription
gamestringGame code: csgo, rust, dota2, tf2
marketHashNamesstring[]Item market hash names. Min 1, max 2000 entries
no_deposit_intentbooleanWhen 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

FieldTypeDescription
idintegerInternal trade ID — pass to create-deposit-by-hash-name. Omitted when no_deposit_intent=true
totalintegerNumber of priced items returned
sumnumberTotal of all price values (USD)
itemsarrayPriced items
items[].namestringMarket hash name (echoed)
items[].pricenumberFinal price after multipliers (USD) — what the merchant will pay out
items[].originalPricenumberProvider'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:

  1. Deposit toggle — only providers with deposits enabled
  2. Circuit breaker — providers currently failing are skipped
  3. 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

StatusMessageCause
400invalid request bodyMalformed JSON
400validation errorMissing or invalid fields (see data array — e.g. marketHashNames exceeds 2000, game not in allowed set)
401missing authorization headerX-Api-Key header not provided
401invalid API keyAPI key not found or inactive
403merchant account is disabledMerchant account deactivated
403IP not whitelisted: <ip>Request IP not in merchant's allowed list
408timeout errorUpstream pricing service timed out — retry
500integration service errorInventory service returned a 5xx error — retry
500internal errorUnexpected server error — retry
502bad gatewayUpstream service unreachable — retry

→ For domain-specific validation codes, see Errors.