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 --compressed "https://merchant-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": true,
      "stickers_count": 2,
      "stickers": [
        {
          "slot": 0,
          "name": "Sticker | Vox Eminor | Katowice 2014",
          "sticker_id": "1234",
          "image_url": "https://cdn.tradeon.market/stickers/vox-eminor-kato14.png",
          "wear": 0.12
        },
        {
          "slot": 2,
          "name": "Sticker | Titan | Katowice 2014",
          "sticker_id": null,
          "image_url": "https://cdn.tradeon.market/stickers/titan-kato14.png",
          "wear": null
        }
      ],
      "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 --compressed "https://merchant-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,
      "stickers": [],
      "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
stickersarrayAlways present; empty [] when the item has no stickers or when sticker details are not yet available for the source provider. See Sticker object below. Do not confuse with has_stickers/stickers_count — those flags can be true/N while stickers is still [] (flags arrive before the detail pass).
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.

Sticker object

Each entry in the stickers array has the following fields:

FieldTypeNotes
slotintPosition on the item, 03.
namestringSticker name, e.g. "Sticker | Vox Eminor | Katowice 2014".
sticker_idstring | nullSticker definition ID. Reliably present for CS2DT and SkinsBack listings; null for others.
image_urlstring | nullCDN image URL of the sticker.
wearnumber | nullSticker wear 0.01.0; null when not provided by the source.

Coverage. Full sticker details (all five fields) are available for items sourced from CS2DT, SkinsBack, and SalesPanel. Partial data (typically name only) is returned for SkinPlace, Skinbux, and AimMarket. No sticker details are returned for Skinout, UUSkins, and WhiteMarket — stickers will be [] for those listings even when has_stickers is true.