API ReferenceCatalog

Catalog

Two endpoints on this page: paginated listing and exact-name search. For the bulk snapshot see Full dump. All require Authorization: Bearer mer_live_… (Authentication).

List items

GET /api/v1/merchant/items

Cursor-paginated. Provider economics (provider_id, provider_price, markup) are not exposed — only the price you pay.

Query parameters

NameTypeDefaultNotes
cursorstringPass next_cursor from a previous response.
limitint501–200.
market_hash_namestringExact match on the canonical Steam name.
min_pricenumberUSD, ≤ 2 decimals.
max_pricenumber
categorystringrifle / knife / sticker / case / etc. Exact match.
exteriorstringFactory New, Field-Tested, etc. Exact match.
raritystringcovert, classified, etc. Exact match.
min_floatnumber0.0–1.0.
max_floatnumber
delivery_typeenuminstant / manual. Unknown values are ignored.
sortenumprice_ascprice_asc / price_desc. Unknown → 400 MERCHANT_INVALID_SORT.

Example

curl "https://api.tradeon.market/api/v1/merchant/items?limit=2&max_price=50&sort=price_asc" \
  -H "Authorization: Bearer mer_live_…"
{
  "items": [
    {
      "id": "8e42bb9c-2e11-4d40-9d51-6e5d2d4b2cf1",
      "market_hash_name": "AK-47 | Redline (Field-Tested)",
      "image_url": "https://cdn.tradeon.market/items/ak47-redline-ft.png",
      "price": 18.40,
      "exterior": "Field-Tested",
      "exterior_code": "FT",
      "float": 0.2451,
      "paint_seed": 462,
      "paint_index": 316,
      "inspect_url": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20...",
      "asset_id": "38947116503",
      "steam_id": null,
      "class_id": "9385506221",
      "instance_id": "188530139",
      "is_stat_trak": false,
      "is_souvenir": false,
      "has_stickers": false,
      "stickers_count": 0,
      "category": "rifle",
      "weapon_type": "AK-47",
      "rarity": "classified",
      "rarity_color": "#d32ce6",
      "delivery_type": "instant",
      "estimated_delivery_minutes": 2
    }
  ],
  "next_cursor": "eyJQcmljZSI6MTguNCwiSWQiOiI4ZTQyYmI5Yy0yZTExLTRkNDAtOWQ1MS02ZTVkMmQ0YjJjZjEifQ=="
}

next_cursor is null when you have reached the end. The cursor is opaque — pass it back unchanged (Conventions → Pagination).

Search by name

GET /api/v1/merchant/items/search?market_hash_name=...

“Find me a copy of this skin under $X with float in [Y, Z]”. Indexed lookup, sub-50 ms.

Query parameters

NameTypeRequiredNotes
market_hash_namestringyesExact Steam name match.
max_pricenumbernoUSD.
min_floatnumberno0.0–1.0.
max_floatnumberno
delivery_typeenumnoinstant / manual.
limitintno1–50, default 10.

Example

curl "https://api.tradeon.market/api/v1/merchant/items/search?market_hash_name=AWP%20%7C%20Asiimov%20(Field-Tested)&max_price=80&limit=3" \
  -H "Authorization: Bearer mer_live_…"
{
  "results": [
    {
      "id": "0a61fcb4-7c5f-4a93-91d2-1e1f0a8a8a3a",
      "market_hash_name": "AWP | Asiimov (Field-Tested)",
      "price": 73.20,
      "float": 0.2199,
      "is_stat_trak": false,
      "is_souvenir": false,
      "has_stickers": false,
      "stickers_count": 0,
      "delivery_type": "instant",
      "estimated_delivery_minutes": 2
    }
  ]
}

Errors

HTTPcodeWhen
400MERCHANT_INVALID_QUERYmarket_hash_name missing.
400MERCHANT_INVALID_SORTsort not one of price_asc, price_desc (/items only).

CatalogItem schema

FieldTypeNotes
iduuidUse as item_id in POST /merchant/buy.
market_hash_namestringCanonical Steam name.
image_urlstring | nullCDN URL.
pricedecimal (USD)The price you pay if you buy now (subject to max_price).
exterior / exterior_codestring | nulle.g. "Field-Tested" / "FT".
floatdecimal | null0.0–1.0.
paint_seedint | nullPattern index. Skins only.
paint_indexint | nullPaint kit index. Skins only. Returned by most providers; null otherwise.
inspect_urlstring | nullSteam in-game inspect link. Available for most items; null otherwise. Describes the item while in the supplier’s stock — it is not a stable key, may change on re-sync.
asset_idstring | nullSteam asset ID in the supplier’s stock. Supplier-side and volatile — Steam mints a new asset ID on every trade, so this identifies the item while it sits in the supplier’s inventory, not after delivery. Returned for most items; null otherwise. String (can exceed 2⁵³).
steam_idstring | nullSteam64 of the account holding the item in the supplier’s stock (a bot/seller account) — not the final buyer, and not your account. Returned for a minority of items (only some suppliers expose the holder); null otherwise. String.
class_idstring | nullSteam economy class ID. Shared across all items of the same name/wear; stable per definition. Returned for most items; null otherwise. String.
instance_idstring | nullSteam economy instance ID. Returned for most items; null otherwise. String.
is_stat_trakbool
is_souvenirbool
has_stickersbool
stickers_countint
categorystring | nulle.g. rifle, knife.
weapon_typestring | nulle.g. AK-47.
rarity / rarity_colorstring | null
delivery_typestringIndicative dispatch speed bucket.
estimated_delivery_minutesint | nullIndicative — bot scheduling and CS2 trade-cooldowns can extend it.

Supplier-side identifiers. asset_id, steam_id, class_id and instance_id describe the item as it sits in the supplier’s stock, before delivery. They are not your inventory coordinates: on every trade Steam assigns a fresh asset_id and the item leaves the holding account, so treat asset_id/steam_id as volatile snapshot values useful for identifying a listing pre-purchase — not as stable keys. class_id/instance_id are stable Steam economy identifiers for the item definition. Coverage varies by source; expect null and do not depend on any single field being present.