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/itemsCursor-paginated. Provider economics (provider_id, provider_price, markup) are not
exposed — only the price you pay.
Query parameters
| Name | Type | Default | Notes |
|---|---|---|---|
cursor | string | — | Pass next_cursor from a previous response. |
limit | int | 50 | 1–200. |
market_hash_name | string | — | Exact match on the canonical Steam name. |
min_price | number | — | USD, ≤ 2 decimals. |
max_price | number | — | |
category | string | — | rifle / knife / sticker / case / etc. Exact match. |
exterior | string | — | Factory New, Field-Tested, etc. Exact match. |
rarity | string | — | covert, classified, etc. Exact match. |
min_float | number | — | 0.0–1.0. |
max_float | number | — | |
delivery_type | enum | — | instant / manual. Unknown values are ignored. |
sort | enum | price_asc | price_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
| Name | Type | Required | Notes |
|---|---|---|---|
market_hash_name | string | yes | Exact Steam name match. |
max_price | number | no | USD. |
min_float | number | no | 0.0–1.0. |
max_float | number | no | |
delivery_type | enum | no | instant / manual. |
limit | int | no | 1–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
| HTTP | code | When |
|---|---|---|
| 400 | MERCHANT_INVALID_QUERY | market_hash_name missing. |
| 400 | MERCHANT_INVALID_SORT | sort not one of price_asc, price_desc (/items only). |
CatalogItem schema
| Field | Type | Notes |
|---|---|---|
id | uuid | Use as item_id in POST /merchant/buy. |
market_hash_name | string | Canonical Steam name. |
image_url | string | null | CDN URL. |
price | decimal (USD) | The price you pay if you buy now (subject to max_price). |
exterior / exterior_code | string | null | e.g. "Field-Tested" / "FT". |
float | decimal | null | 0.0–1.0. |
paint_seed | int | null | Pattern index. Skins only. |
paint_index | int | null | Paint kit index. Skins only. Returned by most providers; null otherwise. |
inspect_url | string | null | Steam 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_id | string | null | Steam 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_id | string | null | Steam64 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_id | string | null | Steam economy class ID. Shared across all items of the same name/wear; stable per definition. Returned for most items; null otherwise. String. |
instance_id | string | null | Steam economy instance ID. Returned for most items; null otherwise. String. |
is_stat_trak | bool | |
is_souvenir | bool | |
has_stickers | bool | |
stickers_count | int | |
stickers | array | Always 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). |
category | string | null | e.g. rifle, knife. |
weapon_type | string | null | e.g. AK-47. |
rarity / rarity_color | string | null | |
delivery_type | string | Indicative dispatch speed bucket. |
estimated_delivery_minutes | int | null | Indicative — bot scheduling and CS2 trade-cooldowns can extend it. |
Supplier-side identifiers.
asset_id,steam_id,class_idandinstance_iddescribe the item as it sits in the supplier’s stock, before delivery. They are not your inventory coordinates: on every trade Steam assigns a freshasset_idand the item leaves the holding account, so treatasset_id/steam_idas volatile snapshot values useful for identifying a listing pre-purchase — not as stable keys.class_id/instance_idare stable Steam economy identifiers for the item definition. Coverage varies by source; expectnulland do not depend on any single field being present.
Sticker object
Each entry in the stickers array has the following fields:
| Field | Type | Notes |
|---|---|---|
slot | int | Position on the item, 0–3. |
name | string | Sticker name, e.g. "Sticker | Vox Eminor | Katowice 2014". |
sticker_id | string | null | Sticker definition ID. Reliably present for CS2DT and SkinsBack listings; null for others. |
image_url | string | null | CDN image URL of the sticker. |
wear | number | null | Sticker wear 0.0–1.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
nameonly) is returned for SkinPlace, Skinbux, and AimMarket. No sticker details are returned for Skinout, UUSkins, and WhiteMarket —stickerswill be[]for those listings even whenhas_stickersistrue.