All API endpoints require an API key. Send it in the Authorization header as Bearer {API_KEY}. Default rate limit is 60 requests per minute.
Browse and search all items currently listed for sale on the Dupe.fi marketplace.
The Dupe API allows you to easily fetch our entire listing catalogue through a downloadable snapshot while keeping the catalogue in sync using our WebSocket feed. Our catalogue snapshot returns a base_cursor value that allows you to subscribe to all events after that cursor using the WebSocket feed.
wss://stream.dupe.fi/api/v1/market/listings/streamConnect directly to wss://stream.dupe.fi/api/v1/market/listings/stream with your Bearer API key. Wait for the hello frame before subscribing.
/api/v1/market/listings/snapshotGET /api/v1/market/listings/snapshot and retain its base_cursor. Download every signed NDJSON gzip shard and import listing rows by id.
Send {"type":"subscribe","cursor":"<base_cursor>"} on the open socket. Buffer incoming event frames while the snapshot is importing.
After the snapshot import commits, apply events in cursor order and persist next_cursor only after your database transaction commits. Upserts and deletes are idempotent, and an event may be delivered more than once after reconnecting.
/api/v1/market/listings/snapshotGet a manifest for the latest Dupe listing catalog snapshot. This manifest contains a Blob URL for gzip-compressed NDJSON shards plus the WebSocket base cursor needed to replay every later change.
Notes
Rate limit is three requests per 24 hours per API key.
Each decompressed line is one JSON listing object. Import every file using listing id as the catalog key.
Supplier-backed rows use the supplier UUID as seller_steamid and return the delivery account in delivery_steamid.
A 202 response means a matching snapshot is being built.
Unauthorized: No API key provided in Authorization header
The full catalog snapshot can be requested up to three times per day.
Catalog snapshot is temporarily unavailable
{
"success": true,
"data": {
"snapshot_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"schema_version": 2,
"generated_at": "2026-08-10T12:00:00.000Z",
"base_cursor": "1849221",
"row_count": 651243,
"uncompressed_bytes": 912345678,
"compressed_bytes": 123456789,
"format": "ndjson",
"compression": "gzip",
"expires_at": "2026-08-11T12:05:00.000Z",
"files": [
{
"blob_name": "catalog/v2/2026-08-10T12-00-00.000Z/part-00001.ndjson.gz",
"rows": 50000,
"compressed_bytes": 9456789,
"uncompressed_bytes": 70123456,
"sha256": "4bd3ad1f30202f9cf86d6eb89b4c34fa7c02746df79b0c6712832784d6356bdc",
"url": "https://dupecatalogprod.blob.core.windows.net/catalog-snapshots/catalog/v2/...?..."
}
]
}
}Request URL Preview
/api/v1/market/listings/snapshot{
"success": true,
"data": {
"snapshot_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"schema_version": 2,
"generated_at": "2026-08-10T12:00:00.000Z",
"base_cursor": "1849221",
"row_count": 651243,
"uncompressed_bytes": 912345678,
"compressed_bytes": 123456789,
"format": "ndjson",
"compression": "gzip",
"expires_at": "2026-08-11T12:05:00.000Z",
"files": [
{
"blob_name": "catalog/v2/2026-08-10T12-00-00.000Z/part-00001.ndjson.gz",
"rows": 50000,
"compressed_bytes": 9456789,
"uncompressed_bytes": 70123456,
"sha256": "4bd3ad1f30202f9cf86d6eb89b4c34fa7c02746df79b0c6712832784d6356bdc",
"url": "https://dupecatalogprod.blob.core.windows.net/catalog-snapshots/catalog/v2/...?..."
}
]
}
}/api/v1/market/listings/streamSubscribe to a live WebSocket feed of listing changes after a snapshot. The feed sends events when listings are added, updated, removed, or affected by a supplier visibility change.
Notes
Connect with Authorization: Bearer {API_KEY}. After hello, send {"type":"subscribe","cursor":"<base_cursor>"}.
Save next_cursor after applying each batch and use it to resume after reconnecting. An event may be delivered again, so updates should be safe to apply more than once.
If the server returns cursor_expired, request a new snapshot and subscribe using its base_cursor.
listing.upserted contains the full stable listing object; listing.updated contains price and/or instant fulfillment changes; listing.deleted removes the id.
A supplier.visibility event identifies the supplier by supplier_steamid, matching seller_steamid on its listings. When api_enabled is false, remove those local listings. When it becomes true, wait for snapshot.ready and bootstrap from the latest snapshot.
Supplier-backed listings use the supplier UUID as seller_steamid and return the delivery account in delivery_steamid.
A credential may hold at most two concurrent stream connections. New handshakes are limited to ten per minute.
Unauthorized: No API key provided in Authorization header
Too many catalog stream connections or handshakes
Server hello, client subscribe, and a representative server event batch.
{
"server_hello": {
"type": "hello",
"schema_version": 2,
"oldest_cursor": "1840000",
"latest_cursor": "1849300",
"heartbeat_seconds": 30
},
"client_subscribe": {
"type": "subscribe",
"cursor": "1849221"
},
"server_events": {
"type": "events",
"events": [
{
"type": "listing.upserted",
"cursor": "1849222",
"published_at": "2026-08-10T12:00:01.000Z",
"listing": {
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"game_slug": "cs2",
"hash_name": "AK-47 | Redline (Field-Tested)",
"price": 42.5,
"category": "BUY_NOW",
"asset_id": "3141592653",
"imageurl": "https://community.cloudflare.steamstatic.com/economy/image/example",
"defindex": 7,
"paintindex": 282,
"paintseed": 10,
"wear_name": "Field-Tested",
"weapon_type": "Rifle",
"floatvalue": 0.18,
"grade": "Classified",
"stickers": [],
"keychains": [],
"keychain_pattern": null,
"blue_gem": null,
"instant_fulfill": true,
"phase": null,
"fade": null,
"class_id": "310777100",
"instance_id": "188530170",
"stattrak": false,
"commodity": false,
"quantity": 1,
"inspect_url": "steam://rungame/730/...",
"seller_steamid": "f3e338f4-a0bd-4531-9508-6ad007a92df3",
"delivery_steamid": "76561199125713099",
"created_at": "2026-08-10T10:00:00.000Z"
}
},
{
"type": "listing.updated",
"cursor": "1849223",
"published_at": "2026-08-10T12:00:02.000Z",
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"changes": {
"price": 41.75
}
},
{
"type": "listing.deleted",
"cursor": "1849224",
"published_at": "2026-08-10T12:00:03.000Z",
"listing_id": "b1b184f7-28f6-4507-b17d-c5de84f8a2dd"
},
{
"type": "supplier.visibility",
"cursor": "1849225",
"published_at": "2026-08-10T12:00:04.000Z",
"supplier_steamid": "f3e338f4-a0bd-4531-9508-6ad007a92df3",
"api_enabled": false,
"requires_snapshot": false
}
],
"next_cursor": "1849225",
"has_more": false
}
}/api/v1/market/get-listingsBrowse all available items on the Dupe.fi marketplace. Filter by item name, price range, float value, stickers, wear condition, and more. Returns detailed item info including seller reputation and instant delivery availability.
Notes
Default pagination is 50 listings per page, capped at 500.
For sequential pagination, pass the opaque meta.next_cursor returned by the previous page. A cursor is tied to the page's sort_by value.
Successful responses may be served from a principal-scoped one-second cache, so listing changes can take up to one second to appear on this endpoint.
Rows with dupe.listings.private = true are excluded. A seller whose verification_method is PRIVATE is still shown when the listing is otherwise eligible; purchase eligibility remains enforced by the buy flow.
Rate limit is 40 requests per minute per API key; please contact support to increase this limit for your account.
Use category=BUY_NOW|NEGOTIABLE|AUCTION for category filtering.
For non-CS2 games, CS2-only filters are rejected; use item name/hash filters and game metadata.
seller.average_fulfillment_time is the seller's historical average delivery time in milliseconds.
For supplier-backed listings, seller.steamid is the supplier UUID and seller.delivery_steamid is the Steam account that will deliver the item; it is null for other listings.
Looking to source CS2 skins for your project? Check out our B2B catalog with all instantly deliverable items.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"limitintegeroptionalHow many listings to return per page. Defaults to 50, max 500.
25cursorstringoptionalOpaque continuation token from meta.next_cursor. Keep all filters and sort_by unchanged when using it.
"eyJ2IjoxLCJzb3J0IjoicHJpY2VfYXNjIiwiaWQiOiI2ZTFiNmM1ZC0zMzg4LTQ1YTUtYTczZC04ZmM2NmQ2ZmQwMDEiLCJ2YWx1ZSI6IjQyLjUifQ"listing_iduuidoptionalFetch a single listing by its ID.
"6e1b6c5d-3388-45a5-a73d-8fc66d6fd001"categoryenumoptionalOnly show listings of this type.
BUY_NOWNEGOTIABLEAUCTION"BUY_NOW"item_namestringoptionalSearch by item name (partial match, not case-sensitive).
"AK-47"hash_namestringoptionalSearch by market hash name (partial match, not case-sensitive).
"AK-47 | Redline (Field-Tested)"min_pricenumberoptionalOnly show listings priced at or above this amount (USDC).
10max_pricenumberoptionalOnly show listings priced at or below this amount (USDC).
125sort_byenumoptionalHow to sort the results.
price_ascprice_descdate_ascdate_desc"date_desc"instant_fulfillbooleanoptionalWhen true, only show items that will be delivered instantly after purchase.
truecommoditybooleanoptionalFilter by the listing commodity flag. Use true for commodity listings or false for non-commodity listings.
trueInvalid sort_by. Must be one of: price_asc, price_desc, date_asc, date_desc
Invalid category. Must be BUY_NOW, NEGOTIABLE, or AUCTION
Invalid cursor
Unauthorized: No API key provided in Authorization header
To fetch all marketplace listings, please use /market/get-all-listings-summary. Please contact support to increase this limit for your account.
Failed to fetch listings. Please try again.
{
"limit": 2,
"category": "BUY_NOW",
"min_price": 10,
"max_price": 250,
"sort_by": "price_asc"
}{
"success": true,
"data": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"hash_name": "AK-47 | Redline (Field-Tested)",
"game_slug": "cs2",
"price": 42.5,
"category": "BUY_NOW",
"asset_id": "3141592653",
"imageurl": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLyhMG1_B1Y-s2tP_FsbeSaCWKC_uJ_t-l9ASvil0R15WjUmYmqc33CaQ91W5QlRbVetETtwNC1P-u34g2L2dpEmS_gznQebcVQ6rs",
"defindex": 7,
"paintindex": 282,
"paintseed": 10,
"wear_name": "Field-Tested",
"weapon_type": "Rifle",
"floatvalue": 0.18,
"grade": "Classified",
"stickers": [],
"keychains": [],
"keychain_pattern": null,
"blue_gem": null,
"instant_fulfill": true,
"phase": null,
"fade": null,
"class_id": "310777100",
"instance_id": "188530170",
"stattrak": true,
"inspect_url": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198000000001A3141592653D123456789",
"seller": {
"steamid": "76561198000000001",
"delivery_steamid": null,
"name": "dupe-seller",
"avatar": "https://avatars.steamstatic.com/example.jpg",
"reputation": 154,
"trades_sell": 83,
"trades_buy": 41,
"average_fulfillment_time": 840000
}
}
],
"meta": {
"limit": 2,
"next_cursor": "eyJ2IjoxLCJzb3J0IjoicHJpY2VfYXNjIiwiaWQiOiI2ZTFiNmM1ZC0zMzg4LTQ1YTUtYTczZC04ZmM2NmQ2ZmQwMDEiLCJ2YWx1ZSI6IjQyLjUifQ"
}
}Request URL Preview
/api/v1/market/get-listings?limit=2&category=BUY_NOW&min_price=10&max_price=250&sort_by=price_asc{
"success": true,
"data": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"hash_name": "AK-47 | Redline (Field-Tested)",
"game_slug": "cs2",
"price": 42.5,
"category": "BUY_NOW",
"asset_id": "3141592653",
"imageurl": "https://community.cloudflare.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLyhMG1_B1Y-s2tP_FsbeSaCWKC_uJ_t-l9ASvil0R15WjUmYmqc33CaQ91W5QlRbVetETtwNC1P-u34g2L2dpEmS_gznQebcVQ6rs",
"defindex": 7,
"paintindex": 282,
"paintseed": 10,
"wear_name": "Field-Tested",
"weapon_type": "Rifle",
"floatvalue": 0.18,
"grade": "Classified",
"stickers": [],
"keychains": [],
"keychain_pattern": null,
"blue_gem": null,
"instant_fulfill": true,
"phase": null,
"fade": null,
"class_id": "310777100",
"instance_id": "188530170",
"stattrak": true,
"inspect_url": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198000000001A3141592653D123456789",
"seller": {
"steamid": "76561198000000001",
"delivery_steamid": null,
"name": "dupe-seller",
"avatar": "https://avatars.steamstatic.com/example.jpg",
"reputation": 154,
"trades_sell": 83,
"trades_buy": 41,
"average_fulfillment_time": 840000
}
}
],
"meta": {
"limit": 2,
"next_cursor": "eyJ2IjoxLCJzb3J0IjoicHJpY2VfYXNjIiwiaWQiOiI2ZTFiNmM1ZC0zMzg4LTQ1YTUtYTczZC04ZmM2NmQ2ZmQwMDEiLCJ2YWx1ZSI6IjQyLjUifQ"
}
}/api/v1/market/get-all-listings-summaryFetch all available items on the Dupe.fi marketplace grouped by item name including lowest price, quantity, and the highest matching active buy offer for each item.
Notes
This endpoint is restricted to 1 request per 5 minutes, please contact support to increase this limit for your account.
The top-level object key is the scoped Steam app id.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"Unauthorized: No API key provided in Authorization header
Failed to fetch prices
{
"730": [
{
"name": "AK-47 | Aquamarine Revenge (Well-Worn)",
"price": 294.99,
"count": 34,
"highest_buy_offer": 282.5,
"buy_offer_count": 12,
"inspect_link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198140328362A42687439674D723402262633934809",
"float": 0.43183836340904236,
"paint_seed": 918,
"screenshot_front_url": "https://files.dupe.fi/screenshots/38dba84f8e4ab929e7bde369af8d4e94794761d4b8e865acb8cfed1069ffa0dc/frontside.png",
"screenshot_back_url": "https://files.dupe.fi/screenshots/38dba84f8e4ab929e7bde369af8d4e94794761d4b8e865acb8cfed1069ffa0dc/backside.png",
"stickers": [
{
"name": "SmithZz (Foil) | Cologne 2016",
"wear": 0,
"slot": 0
},
{
"name": "flamie (Foil) | Cologne 2016",
"wear": 0,
"slot": 1
},
{
"name": "Luminosity Gaming (Holo) | MLG Columbus 2016",
"wear": 0,
"slot": 2
},
{
"name": "device (Foil) | Cologne 2016",
"wear": 0,
"slot": 3
}
]
}
]
}Request URL Preview
/api/v1/market/get-all-listings-summary{
"730": [
{
"name": "AK-47 | Aquamarine Revenge (Well-Worn)",
"price": 294.99,
"count": 34,
"highest_buy_offer": 282.5,
"buy_offer_count": 12,
"inspect_link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198140328362A42687439674D723402262633934809",
"float": 0.43183836340904236,
"paint_seed": 918,
"screenshot_front_url": "https://files.dupe.fi/screenshots/38dba84f8e4ab929e7bde369af8d4e94794761d4b8e865acb8cfed1069ffa0dc/frontside.png",
"screenshot_back_url": "https://files.dupe.fi/screenshots/38dba84f8e4ab929e7bde369af8d4e94794761d4b8e865acb8cfed1069ffa0dc/backside.png",
"stickers": [
{
"name": "SmithZz (Foil) | Cologne 2016",
"wear": 0,
"slot": 0
},
{
"name": "flamie (Foil) | Cologne 2016",
"wear": 0,
"slot": 1
},
{
"name": "Luminosity Gaming (Holo) | MLG Columbus 2016",
"wear": 0,
"slot": 2
},
{
"name": "device (Foil) | Cologne 2016",
"wear": 0,
"slot": 3
}
]
}
]
}/api/v1/market/b2bFetch individual instantly fulfillable Dupe B2B P2P listings for CS2 or S&box.
Notes
This endpoint is restricted to 1 request per 2.5 minutes, please contact support to increase this limit for your account.
The top-level object key is the scoped Steam app id (730 or 590830).
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"Unsupported query parameter(s): game_id. Only game is supported.
The B2B catalogue endpoint currently supports cs2/730 and sbox/590830 only.
Unauthorized: No API key provided in Authorization header
Failed to fetch B2B catalogue
{
"730": [
{
"id": "listing-id-1",
"name": "AK-47 | Redline (Field-Tested)",
"price": 42.5,
"s": "76561198140328362",
"inspect_link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198140328362A42687439674D723402262633934809",
"float": 0.180123,
"paint_seed": 321,
"commodity": false
}
]
}{
"game": "sbox"
}{
"590830": [
{
"id": "sbox-listing-id",
"name": "Love Heart Boxers",
"price": 7.5,
"s": "76561198140328362",
"commodity": true
}
]
}Request URL Preview
/api/v1/market/b2b{
"730": [
{
"id": "listing-id-1",
"name": "AK-47 | Redline (Field-Tested)",
"price": 42.5,
"s": "76561198140328362",
"inspect_link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198140328362A42687439674D723402262633934809",
"float": 0.180123,
"paint_seed": 321,
"commodity": false
}
]
}/api/v1/market/get-buy-offersSee all active buy offers currently available for an item. Use GET for a single item or POST for up to 20 items at once.
Notes
Use GET with query parameters to check one item.
Use POST with a JSON body for bulk lookups — accepts { item }, { items }, or an array.
Bulk requests support up to 20 items per request.
All items in a bulk lookup must resolve to the same game. You can set one top-level game scope or include the same item-level scope on each item.
CS2 matching uses float/paint/charm/StatTrak/Souvenir constraints. Non-CS2 matching ignores CS2-only constraints and scopes to the configured game lane.
Buy offers are returned from highest price to lowest price. If prices match, older offers appear first.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"market_hash_namestringrequiredThe full market hash name of the item you want to check.
"AK-47 | Redline (Field-Tested)"floatvaluenumberoptionalThe item's float value, for more accurate buy offer matching.
0.18paint_seedintegeroptionalThe item's paint seed, for more accurate buy offer matching.
17paint_indexintegeroptionalThe item's paint index. For Doppler items, this helps match the right phase-specific buy offers.
415stattrakbooleanoptionalWhether the item is StatTrak.
falsesouvenirbooleanoptionalWhether the item is Souvenir.
falsegamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"itemsarrayoptionalArray of items to check for matching buy offers. Each item needs a market_hash_name. Up to 20 items per request.
[
{
"asset_id": "1234",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"floatvalue": 0.18
}
]Each item must include market_hash_name or hash_name.
Maximum 20 items allowed per request.
Method not allowed. Use GET or POST.
Failed to get active buy offers. Please try again.
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"floatvalue": 0.18,
"stattrak": false
}{
"success": true,
"data": {
"asset_id": "quote-1",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"buy_offers": [
{
"buy_offer_id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"price": 38.25,
"quantity": 2,
"floatvalue_min": null,
"floatvalue_max": null,
"paint_seed": null,
"paint_index": null,
"stattrak": false,
"souvenir": null,
"auto_custody": false,
"created_at": "2026-01-01T00:00:00.000Z"
}
]
},
"meta": {
"total": 1,
"bulk": false
}
}{
"items": [
{
"asset_id": "1234",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"floatvalue": 0.18
},
{
"asset_id": "5678",
"market_hash_name": "M4A1-S | Printstream (Minimal Wear)",
"floatvalue": 0.09
}
]
}{
"success": true,
"data": [
{
"asset_id": "1234",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"buy_offers": [
{
"buy_offer_id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"price": 38.25,
"quantity": 2,
"floatvalue_min": null,
"floatvalue_max": null,
"paint_seed": null,
"paint_index": null,
"stattrak": false,
"souvenir": null,
"auto_custody": false,
"created_at": "2026-01-01T00:00:00.000Z"
}
]
},
{
"asset_id": "5678",
"market_hash_name": "M4A1-S | Printstream (Minimal Wear)",
"buy_offers": []
}
],
"meta": {
"total": 2,
"bulk": true
}
}Request URL Preview
/api/v1/market/get-buy-offers?market_hash_name=AK-47+%7C+Redline+%28Field-Tested%29&floatvalue=0.18&stattrak=false{
"success": true,
"data": {
"asset_id": "quote-1",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"buy_offers": [
{
"buy_offer_id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"price": 38.25,
"quantity": 2,
"floatvalue_min": null,
"floatvalue_max": null,
"paint_seed": null,
"paint_index": null,
"stattrak": false,
"souvenir": null,
"auto_custody": false,
"created_at": "2026-01-01T00:00:00.000Z"
}
]
},
"meta": {
"total": 1,
"bulk": false
}
}Purchase items from the marketplace using a two-step USDC payment flow on Solana.
Buying an item on Dupe is a two-step process. First you ask Dupe to build a USDC payment transaction, then you sign it with your Solana wallet and tell Dupe to finalize the purchase. The entire flow looks like this:
/api/v1/market/get-listingsBrowse the marketplace with GET /api/v1/market/get-listings and pick one or more items to buy.
/api/v1/buy/initiatePOST the listing IDs to /api/v1/buy/initiate. Dupe resolves the wallet linked to the API key, checks eligibility, calculates the total, and returns a serialized Solana transaction along with a unique reference key. You can also supply an optional order_number for later lookup. The reference expires after 5 minutes.
Deserialize the base-64 transaction returned in step 2 and sign it with your Solana wallet. Then broadcast it to the network and wait for at least confirmed commitment.
/api/v1/buy/executePOST the on-chain transaction signature and the reference from step 2 to /api/v1/buy/execute. Dupe verifies the payment on-chain and creates the trade(s). If the transaction isn't visible yet, retry after a few seconds.
The seller is notified and the item delivery process begins. You can track progress via /api/v1/trades/active.
/api/v1/buy/initiateStart a purchase by submitting the listing IDs you want to buy. Optionally provide a custom Steam delivery URL for the whole purchase. Dupe validates availability and the delivery recipient, calculates the total in USDC, and returns a ready-to-sign Solana transaction. The transaction expires after 5 minutes.
Notes
Each listing is checked for availability and eligibility before the transaction is built.
Negotiable offers must be at least 50% of the listing price.
The returned transaction and reference expire after 5 minutes.
All listing IDs in one purchase must belong to the same game.
Single-listing checkout respects the game's directBuy capability. Multi-listing checkout respects the game's cartBuy capability.
order_number is optional, case-sensitive, and unique per authenticated account. It may contain letters, numbers, periods, underscores, colons, and hyphens, up to 128 characters.
delivery_trade_url is optional. When supplied, Dupe resolves its owning Steam account and binds that recipient to the reference before payment. Omit it for delivery to your own linked Steam account.
The execute endpoint cannot replace the recipient bound during initiation.
order_numberstringoptionalYour own custom purchase identifier for reconciliation and transaction lookup. It must be unique within your authenticated account.
"DEV-ORDER-1001"itemsarrayrequiredList of items to buy. Each entry needs a listing id. For negotiable listings, include price (your offer in USDC; must be at least 50% of the listing price). Listing category is taken from the listing itself, not from this payload.
[
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"price": 42.5
}
]delivery_trade_urlstringoptionalAlternative Steam trade URL that should receive every item in this purchase. It must belong to a different, trade-capable Steam account. Omit this field for normal delivery to the Steam account linked to your Dupe user.
"https://steamcommunity.com/tradeoffer/new/?partner=1585246653&token=32ddh32D"Items array is required
User wallet not found
Invalid order_number format
order_number has already been used for this account
One or more items are temporarily reserved by another buyer.
Some items are not eligible for purchase. Please remove them from your cart.
Marketplace eligibility restriction for purchase
You need the Dupe mobile app to purchase from sellers with private verification.
delivery_trade_url must be a valid Steam trade URL
The Steam account for delivery_trade_url is unable to trade.
delivery_trade_url cannot belong to a seller in this purchase.
Unable to verify delivery_trade_url at this time. Please try again later.
Failed to build transaction. Please try again.
{
"order_number": "DEV-ORDER-1001",
"items": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001"
},
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd002",
"price": 19.75
}
]
}{
"success": true,
"data": {
"transaction": "AQABAgM...base64",
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"order_number": "DEV-ORDER-1001",
"amount": 62.25,
"blockhash": "9qFrVtY7m3...",
"lastValidBlockHeight": 278355120,
"expires_at": "2026-04-08T12:05:00.000Z",
"network": "mainnet-beta",
"usdc_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"items": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001"
},
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd002"
}
]
}
}{
"delivery_trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=1585246653&token=32ddh32D",
"items": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001"
}
]
}{
"success": true,
"data": {
"transaction": "AQABAgM...base64",
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"amount": 42.5,
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"expires_at": "2026-04-08T12:05:00.000Z"
}
}Request URL Preview
/api/v1/buy/initiate{
"success": true,
"data": {
"transaction": "AQABAgM...base64",
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"order_number": "DEV-ORDER-1001",
"amount": 62.25,
"blockhash": "9qFrVtY7m3...",
"lastValidBlockHeight": 278355120,
"expires_at": "2026-04-08T12:05:00.000Z",
"network": "mainnet-beta",
"usdc_mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"items": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001"
},
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd002"
}
]
}
}/api/v1/buy/executeComplete a purchase after signing the transaction from the initiate step. Submit the on-chain transaction signature and reference key — Dupe verifies the USDC payment on Solana and creates the trade(s), using any custom delivery recipient already bound to that reference. If the transaction isn't confirmed yet, retry after a few seconds.
Notes
When a confirmed payment cannot complete, the response includes details.payment_received: true and details.requires_review: true. Do not send another payment; the purchase is queued for manual review and no automatic USDC refund is issued.
signaturestringrequiredThe Solana transaction signature after you signed and broadcast the transaction.
"3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz"referencestringrequiredThe unique reference key returned by the initiate step.
"4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm"Signature is required
Reference is required
Purchase processing failed after payment. Check details.requires_review before taking action.
Pending transaction not found. Please initiate a new purchase.
Transaction not yet visible on the expected network. Retry shortly.
Payment was received, but the listing could not be safely claimed. The transaction is queued for review.
Failed to execute transaction. Please try again.
Payment was received, but the purchase could not be completed. Do not send another payment; this transaction has been queued for review.
{
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm"
}{
"success": true,
"data": {
"message": "You have successfully initialised the trade offer",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"order_number": "DEV-ORDER-1001",
"trades": [
{
"id": "f2eb76b1-8f8e-43d7-8ec2-a92eab946964",
"listing_id": "5811cda0-72bb-4bfa-9de2-330246468da8",
"price": 1.14,
"created_at": "2026-07-16T20:55:05.552787+00:00",
"updated_at": "2026-07-16T20:55:05.552787+00:00",
"buyer_steamid": "76561198119723126",
"status": "ACCEPT_PURCHASE_REQUEST",
"category": "REQUEST",
"buyer_link": "https://steamcommunity.com/tradeoffer/new/?partner=1585246653&token=32ddh32D",
"buyer_is_anon": false,
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"delivery_trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=1585246653&token=32ddh32D"
}
]
}
}Returned after payment is confirmed but the listing cannot be safely claimed or purchase processing cannot complete. Do not submit another payment.
{
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm"
}{
"success": false,
"error": "Payment was received, but the listing could not be safely claimed. Do not send another payment; this transaction has been queued for review.",
"details": {
"payment_received": true,
"requires_review": true,
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"reason": "not_reserved"
}
}Request URL Preview
/api/v1/buy/execute{
"success": true,
"data": {
"message": "You have successfully initialised the trade offer",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"order_number": "DEV-ORDER-1001",
"trades": [
{
"id": "f2eb76b1-8f8e-43d7-8ec2-a92eab946964",
"listing_id": "5811cda0-72bb-4bfa-9de2-330246468da8",
"price": 1.14,
"created_at": "2026-07-16T20:55:05.552787+00:00",
"updated_at": "2026-07-16T20:55:05.552787+00:00",
"buyer_steamid": "76561198119723126",
"status": "ACCEPT_PURCHASE_REQUEST",
"category": "REQUEST",
"buyer_link": "https://steamcommunity.com/tradeoffer/new/?partner=1585246653&token=32ddh32D",
"buyer_is_anon": false,
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"delivery_trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=1585246653&token=32ddh32D"
}
]
}
}Sell your items instantly at the best available buy offer price — no listing required.
/api/v1/insta-sell/get-quoteCheck how much you can instantly sell an item for. Dupe matches your item against all active buy offers and returns the best available price. Use GET for a single item or POST for up to 50 items at once.
Notes
Use GET with query parameters for a single item quote.
Use POST with a JSON body for bulk quotes — accepts { item }, { items }, or an array.
Bulk requests are capped at 50 items.
market_hash_namestringrequiredThe full market hash name of the item you want to sell.
"AK-47 | Redline (Field-Tested)"floatvaluenumberoptionalThe item's float value, for more accurate quote matching.
0.18paint_seedintegeroptionalThe item's paint seed, for more accurate quote matching.
17stattrakbooleanoptionalWhether the item is StatTrak.
falseitemsarrayoptionalArray of items to get quotes for. Each item needs a market_hash_name. Up to 50 items per request.
[
{
"asset_id": "1234",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"floatvalue": 0.18
}
]Each item must include market_hash_name or hash_name.
Maximum 50 items allowed per request.
Method not allowed. Use GET or POST.
Failed to get instant sell quote. Please try again.
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"floatvalue": 0.18,
"stattrak": false
}{
"success": true,
"data": {
"asset_id": "quote-1",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"insta_sell_price": 38.25,
"buy_offer_id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"auto_custody": false,
"error": null
},
"meta": {
"total": 1,
"bulk": false
}
}{
"items": [
{
"asset_id": "1234",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"floatvalue": 0.18
},
{
"asset_id": "5678",
"market_hash_name": "M4A1-S | Printstream (Minimal Wear)",
"floatvalue": 0.09
}
]
}{
"success": true,
"data": [
{
"asset_id": "1234",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"insta_sell_price": 38.25,
"buy_offer_id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"auto_custody": false,
"error": null
},
{
"asset_id": "5678",
"market_hash_name": "M4A1-S | Printstream (Minimal Wear)",
"insta_sell_price": null,
"buy_offer_id": null,
"auto_custody": false,
"error": "No matching buy offer found."
}
],
"meta": {
"total": 2,
"bulk": true
}
}Request URL Preview
/api/v1/insta-sell/get-quote?market_hash_name=AK-47+%7C+Redline+%28Field-Tested%29&floatvalue=0.18&stattrak=false{
"success": true,
"data": {
"asset_id": "quote-1",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"insta_sell_price": 38.25,
"buy_offer_id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"auto_custody": false,
"error": null
},
"meta": {
"total": 1,
"bulk": false
}
}/api/v1/insta-sell/sell-itemInstantly sell one of your items into a matching buy offer. Provide the buy offer ID (from a quote) and your Steam asset ID to execute the sale immediately.
buy_offer_iduuidoptionalThe ID of the buy offer to sell into (from the quote response).
"f60be7f8-fc74-4b6d-a4de-a2bd28136001"bid_iduuidoptionalAlternative field name for the buy offer ID. Use buy_offer_id instead.
"f60be7f8-fc74-4b6d-a4de-a2bd28136001"asset_idstringrequiredThe Steam asset ID of the item you want to sell.
"3141592653"Method not allowed. Use POST.
Invalid sell request or unavailable buy offer.
{
"buy_offer_id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"asset_id": "3141592653"
}{
"success": true,
"message": "Item sold successfully.",
"trade_id": "e6fd10e6-6992-48e5-a683-d633d2417001"
}Request URL Preview
/api/v1/insta-sell/sell-item{
"success": true,
"message": "Item sold successfully.",
"trade_id": "e6fd10e6-6992-48e5-a683-d633d2417001"
}Create, view, update, and remove your own marketplace listings.
/api/v1/my-listings/createList Steam inventory or custody items for sale. Use a set price or Fast Sell.
Notes
Anonymous accounts can only list items held in Dupe custody.
Use game when listing non-CS2 items.
Set fast_sell: true for a Steam inventory or custody item. Dupe calculates the price.
For a manual listing, include price.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"itemsarrayoptionalItems to list. Each item needs a. Add price for manual listings or fast_sell: true for Fast Sell.
[
{
"a": "3141592653",
"price": 49.5
}
]categoryenumoptionalPer object in items: listing type. Defaults to BUY_NOW when omitted.
BUY_NOWNEGOTIABLEAUCTION"BUY_NOW"expireintegeroptionalPer object in items: days until the listing expires. Required when category is AUCTION.
137147fast_sellbooleanoptionalSet to true to use Fast Sell. Omit it or set false for a manual listing.
trueMethod not allowed. Use POST.
fast_sell must be true or false.
Fast Sell is not available for this game.
Fast Sell is unavailable right now.
{
"game": "sbox",
"items": [
{
"a": "3141592653",
"fast_sell": true
},
{
"a": "3141592654",
"price": 19.99
}
]
}{
"success": true,
"message": "2 items listed successfully.",
"data": {
"listings": [
{
"listingId": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd011",
"price": 80,
"hashName": "Love Heart Boxers",
"custodianSteamId": "76561199669917115"
},
{
"listingId": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd012",
"price": 19.99,
"hashName": "Cardboard Shield",
"custodianSteamId": "76561199669917115"
}
],
"count": 2
}
}{
"game": "sbox",
"items": [
{
"a": "3141592655",
"fast_sell": true
}
]
}{
"success": true,
"message": "1 item is now listed.",
"listingOutcome": {
"total": 1,
"matchedWithBuyers": 0,
"listed": 1,
"attemptedBuyerMatches": 0,
"unmatchedBuyerMatches": 0,
"failedBuyerMatches": 0
}
}{
"items": [
{
"a": "3141592653",
"price": 49.5,
"category": "BUY_NOW",
"private": true
}
]
}{
"success": true,
"message": "1 item is now listed.",
"listingOutcome": {
"total": 1,
"matchedWithBuyers": 0,
"listed": 1,
"attemptedBuyerMatches": 0,
"unmatchedBuyerMatches": 0,
"failedBuyerMatches": 0
}
}Request URL Preview
/api/v1/my-listings/create{
"success": true,
"message": "2 items listed successfully.",
"data": {
"listings": [
{
"listingId": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd011",
"price": 80,
"hashName": "Love Heart Boxers",
"custodianSteamId": "76561199669917115"
},
{
"listingId": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd012",
"price": 19.99,
"hashName": "Cardboard Shield",
"custodianSteamId": "76561199669917115"
}
],
"count": 2
}
}/api/v1/my-listings/getView all of your active listings on Dupe. Filter by item name, price range, or category, and sort by price or date.
Notes
Use game to fetch listings for one game.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"limitintegeroptionalHow many listings to return per page. Defaults to 50, max 500.
25offsetintegeroptionalNumber of listings to skip for pagination. Starts at 0.
0categoryenumoptionalOnly include listings of this type.
BUY_NOWNEGOTIABLEAUCTION"BUY_NOW"hash_namestringoptionalSearch by market hash name (partial match).
"Redline"sort_byenumoptionalHow to sort the results.
price_ascprice_descdate_ascdate_desc"date_desc"{
"limit": 2,
"offset": 0,
"sort_by": "date_desc"
}{
"success": true,
"data": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd010",
"hash_name": "AK-47 | Redline (Field-Tested)",
"price": 49.5,
"category": "BUY_NOW",
"asset_id": "3141592653"
}
],
"meta": {
"limit": 2,
"offset": 0
}
}Request URL Preview
/api/v1/my-listings/get?limit=2&offset=0&sort_by=date_desc{
"success": true,
"data": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd010",
"hash_name": "AK-47 | Redline (Field-Tested)",
"price": 49.5,
"category": "BUY_NOW",
"asset_id": "3141592653"
}
],
"meta": {
"limit": 2,
"offset": 0
}
}/api/v1/my-listings/updateUpdate the price or details of one or more of your active listings. Supports single updates and bulk updates with a per-listing result.
Notes
For bulk updates, send { listings: [] }.
Bulk requests are capped at 100 listing updates per request.
iduuidrequiredThe ID of the listing you want to update.
"6e1b6c5d-3388-45a5-a73d-8fc66d6fd010"pricenumberoptionalNew price for the listing in USDC.
54.25categoryenumoptionalThe listing type to apply.
BUY_NOWNEGOTIABLEAUCTION"NEGOTIABLE"expireintegeroptionalNumber of days until the listing expires. Required when setting category to AUCTION.
137147privatebooleanoptionalWhen true, the listing is private and not shown in public browse.
truelistingsarrayoptionalBulk update payload. Each entry accepts the same fields as the single update request.
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd010",
"price": 54.25
}{
"success": true,
"message": "Listing updated successfully."
}{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd010",
"private": true
}{
"success": true,
"message": "Listing updated successfully."
}{
"listings": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd010",
"price": 54.25
},
{
"id": "9d31aaf6-6bb7-4b35-b530-c856d89dbf9a",
"private": true
}
]
}{
"success": true,
"message": "Processed 2 listing updates.",
"results": [
{
"success": true,
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd010",
"index": 0,
"status": 200,
"message": "Listing updated successfully."
},
{
"success": false,
"id": "9d31aaf6-6bb7-4b35-b530-c856d89dbf9a",
"index": 1,
"status": 403,
"error": "You can only update your own listings."
}
],
"stats": {
"total": 2,
"updated": 1,
"failed": 1
}
}Request URL Preview
/api/v1/my-listings/update{
"success": true,
"message": "Listing updated successfully."
}/api/v1/my-listings/deleteRemove one or more of your active listings from the marketplace. Supports single deletes and bulk deletes with a per-listing result.
Notes
Send a single { id } object to keep the legacy single-listing response.
For bulk deletes, send { listings: [{ id }] }.
Bulk requests are capped at 100 listing deletions per request.
iduuidrequiredThe ID of the listing you want to remove.
"6e1b6c5d-3388-45a5-a73d-8fc66d6fd010"listingsarrayoptionalBulk delete payload containing one or more listing objects with id.
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd010"
}{
"success": true,
"message": "You have successfully unlisted the item."
}{
"listings": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd010"
},
{
"id": "9d31aaf6-6bb7-4b35-b530-c856d89dbf9a"
}
]
}{
"success": true,
"message": "Processed 2 listing deletions.",
"results": [
{
"success": true,
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd010",
"index": 0,
"status": 200,
"message": "You have successfully unlisted the item."
},
{
"success": false,
"id": "9d31aaf6-6bb7-4b35-b530-c856d89dbf9a",
"index": 1,
"status": 400,
"error": "Listing cannot be deleted because it has a trade associated with it."
}
],
"stats": {
"total": 2,
"deleted": 1,
"failed": 1
}
}Request URL Preview
/api/v1/my-listings/delete{
"success": true,
"message": "You have successfully unlisted the item."
}Place and manage standing buy offers so sellers can sell directly to you.
/api/v1/buy-offers/createPlace a standing buy offer for items you want to purchase at a set price. When a seller sells into your offer, the trade is created automatically. Supports single or bulk creation (up to 250 per request).
Notes
Send a single offer object, a top-level array of offers, or { buy_offers: [] } for bulk creation.
Set top-level game to create offers for a non-CS2 game. The resolved game_id is forwarded into each delegated offer unless that offer already has one.
Non-CS2 buy-offer behavior is governed by the game's feature capabilities and lane configuration.
This route also enforces a weighted write limit of 1000 write units per 60 seconds. Each buy offer in the request costs 1 write unit, so a request with 25 buy offers consumes 25 units.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"item_namestringrequiredThe market hash name of the item you want to buy.
"AK-47 | Redline (Field-Tested)"pricenumberrequiredHow much you're willing to pay per item in USDC. Must be between 0.01 and 1,000,000 with at most two decimal places.
38.25quantityintegerrequiredHow many of this item you want to buy. Must be a whole number from 1 to 999.
2floatvalue_minnumberoptionalMinimum wear (float) for listings that can fill your offer. Omit or use null to allow any lower bound.
0.15floatvalue_maxnumberoptionalMaximum wear (float) for listings that can fill your offer. Omit or use null to allow any upper bound.
0.38paint_seedintegeroptionalRequire a specific paint seed. Omit or use null to allow any seed.
661paint_indexintegeroptionalPaint index filter. Omit or use null to allow any phase.
415phasestringoptionalDefine a specific phase for Doppler or Gamma Doppler items. Omit or use null to create a buy offer for any phase
phase1phase2phase3phase4rubysapphireblackpearlemerald"phase2"{
"item_name": "AK-47 | Redline (Field-Tested)",
"price": 38.25,
"quantity": 2,
"floatvalue_min": 0.15,
"floatvalue_max": 0.38
}{
"success": true,
"data": {
"message": "Buy offer created successfully.",
"buy_offer": {
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"commitment_amount": 76.5,
"item_name": "AK-47 | Redline (Field-Tested)",
"floatvalue_min": 0.15,
"floatvalue_max": 0.38,
"paint_seed": null,
"phase": null
}
}
}{
"buy_offers": [
{
"item_name": "AK-47 | Redline (Field-Tested)",
"price": 38.25,
"quantity": 2
},
{
"item_name": "M4A1-S | Printstream (Minimal Wear)",
"price": 112.5,
"quantity": 1,
"paint_index": 415
}
]
}{
"success": true,
"data": {
"message": "Buy offers processed successfully.",
"results": [
{
"success": true,
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"item_name": "AK-47 | Redline (Field-Tested)",
"floatvalue_min": null,
"floatvalue_max": null,
"paint_seed": null,
"phase": null
},
{
"success": true,
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136002",
"item_name": "M4A1-S | Printstream (Minimal Wear)",
"floatvalue_min": null,
"floatvalue_max": null,
"paint_seed": null,
"phase": null
}
],
"stats": {
"total": 2,
"created": 2,
"failed": 0
}
}
}Request URL Preview
/api/v1/buy-offers/create{
"success": true,
"data": {
"message": "Buy offer created successfully.",
"buy_offer": {
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"commitment_amount": 76.5,
"item_name": "AK-47 | Redline (Field-Tested)",
"floatvalue_min": 0.15,
"floatvalue_max": 0.38,
"paint_seed": null,
"phase": null
}
}
}/api/v1/buy-offers/updateChange the price, quantity, or active status of your existing buy offers. You can also pause and resume individual offers. Supports single or bulk updates (up to 250 per request).
Notes
Send a single update object, a top-level array of updates, or { updates: [] } for bulk updates.
This route also enforces a weighted write limit of 1000 write units per 60 seconds. Each buy offer update in the request costs 1 write unit, so a request with 25 updates consumes 25 units.
iduuidrequiredThe ID of the buy offer to update. You can also use buy_offer_id.
"f60be7f8-fc74-4b6d-a4de-a2bd28136001"pricenumberoptionalNew offer price in USDC. When provided, must be between 0.01 and 1,000,000 with at most two decimal places.
39.75quantityintegeroptionalNew quantity you want to buy. When provided, must be a whole number from 1 to 999.
3floatvalue_minnumberoptionalMinimum wear (float) for listings that can fill your offer. Omit to leave unchanged, or use null to clear the lower bound.
0.15floatvalue_maxnumberoptionalMaximum wear (float) for listings that can fill your offer. Omit to leave unchanged, or use null to clear the upper bound.
0.38paint_seedintegeroptionalPaint seed filter. Omit to leave unchanged, or use null to clear the filter.
661pausedbooleanoptionalSet to true to pause the offer, or false to resume it.
true{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"paused": true
}{
"success": true,
"data": {
"message": "Buy offer updated successfully.",
"buy_offer": {
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"paused": true,
"updated": true,
"item_name": "AK-47 | Redline (Field-Tested)",
"floatvalue_min": null,
"floatvalue_max": null,
"paint_seed": null,
"phase": null
}
}
}{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"floatvalue_min": 0.15,
"floatvalue_max": 0.38
}{
"success": true,
"data": {
"message": "Buy offer updated successfully.",
"buy_offer": {
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"updated": true,
"item_name": "AK-47 | Redline (Field-Tested)",
"floatvalue_min": 0.15,
"floatvalue_max": 0.38,
"paint_seed": null,
"phase": null
}
}
}{
"updates": [
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"price": 39.75,
"floatvalue_min": 0.1,
"floatvalue_max": 0.45
},
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136002",
"quantity": 2,
"paint_seed": 661
}
]
}{
"success": true,
"data": {
"message": "Processed 2 buy offer updates.",
"results": [
{
"success": true,
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"index": 0,
"item_name": "AK-47 | Redline (Field-Tested)",
"floatvalue_min": 0.1,
"floatvalue_max": 0.45,
"paint_seed": null,
"phase": null
},
{
"success": true,
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136002",
"index": 1,
"item_name": "★ Karambit | Doppler (Factory New)",
"floatvalue_min": null,
"floatvalue_max": null,
"paint_seed": 661,
"phase": null
}
],
"stats": {
"total": 2,
"updated": 2,
"failed": 0
}
}
}Request URL Preview
/api/v1/buy-offers/update{
"success": true,
"data": {
"message": "Buy offer updated successfully.",
"buy_offer": {
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"paused": true,
"updated": true,
"item_name": "AK-47 | Redline (Field-Tested)",
"floatvalue_min": null,
"floatvalue_max": null,
"paint_seed": null,
"phase": null
}
}
}/api/v1/buy-offers/deleteCancel and remove one or more of your active buy offers. Supports single or bulk deletion (up to 1000 per request).
Notes
This route also enforces a weighted write limit of 1000 write units per 60 seconds. Each buy offer id in the request costs 1 write unit, so a request with 25 ids consumes 25 units.
iduuidoptionalThe ID of the buy offer to delete. You can also use buy_offer_id.
"f60be7f8-fc74-4b6d-a4de-a2bd28136001"idsarrayoptionalArray of buy offer IDs to delete in bulk (up to 1000).
[
"f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"f60be7f8-fc74-4b6d-a4de-a2bd28136002"
]{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001"
}{
"success": true,
"data": {
"message": "Buy offer deleted successfully.",
"deleted": {
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001"
}
}
}{
"ids": [
"f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"f60be7f8-fc74-4b6d-a4de-a2bd28136002"
]
}{
"success": true,
"data": {
"message": "Buy offers processed successfully.",
"results": [
{
"success": true,
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001"
},
{
"success": true,
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136002"
}
]
}
}Request URL Preview
/api/v1/buy-offers/delete{
"success": true,
"data": {
"message": "Buy offer deleted successfully.",
"deleted": {
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001"
}
}
}/api/v1/buy-offers/getView your current buy offers with filters for status (active or paused), type, and specific IDs.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"typeenumoptionalFilter by offer type — REGULAR for standard offers, MARKET_MAKER for automated offers, or ALL.
ALLREGULARMARKET_MAKER"REGULAR"statusenumoptionalFilter by offer status. Use comma-separated values to match any of the listed statuses (e.g. ACTIVE,PAUSED). Omit or use ALL for no status filter.
ACTIVEPAUSEDALL"ACTIVE"iduuidoptionalFetch a single buy offer by its ID.
"f60be7f8-fc74-4b6d-a4de-a2bd28136001"buy_offer_iduuidoptionalAlias for id when fetching a single buy offer.
"f60be7f8-fc74-4b6d-a4de-a2bd28136001"idsstringoptionalFetch specific buy offers by their IDs (comma-separated).
"f60be7f8-fc74-4b6d-a4de-a2bd28136001,f60be7f8-fc74-4b6d-a4de-a2bd28136002"limitintegeroptionalHow many offers to return per page. Defaults to 50, max 500.
25offsetintegeroptionalNumber of offers to skip for pagination. Starts at 0.
0{
"type": "REGULAR",
"status": "ACTIVE",
"limit": 2,
"offset": 0
}{
"success": true,
"data": [
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"item_name": "AK-47 | Redline (Field-Tested)",
"price": 38.25,
"quantity": 2,
"matched_quantity": 0,
"status": "ACTIVE"
}
],
"meta": {
"total": 1,
"limit": 2,
"offset": 0,
"has_more": false,
"filters": {
"type": "REGULAR",
"status": [
"ACTIVE"
]
}
}
}Request URL Preview
/api/v1/buy-offers/get?type=REGULAR&status=ACTIVE&limit=2&offset=0{
"success": true,
"data": [
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"item_name": "AK-47 | Redline (Field-Tested)",
"price": 38.25,
"quantity": 2,
"matched_quantity": 0,
"status": "ACTIVE"
}
],
"meta": {
"total": 1,
"limit": 2,
"offset": 0,
"has_more": false,
"filters": {
"type": "REGULAR",
"status": [
"ACTIVE"
]
}
}
}/api/v1/buy-offers/get-balanceCheck your available USDC balance for placing and funding buy offers.
Notes
Balance is global. You can create an infinite amount of buy offers for different items as long as the buy offer price is within your current balance.
{
"success": true,
"balance": {
"usdc": 1250.5
}
}Request URL Preview
/api/v1/buy-offers/get-balance{
"success": true,
"balance": {
"usdc": 1250.5
}
}/api/v1/buy-offers/historyView the history of your past buy offers, including completed, cancelled, and expired entries.
Notes
Buy offers that were matched will have status set to COMPLETED and will return a trade_id for the trade associated with the buy offer.
Use game to restrict history to one game.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"typeenumoptionalFilter by offer type — REGULAR, MARKET_MAKER, or ALL.
ALLREGULARMARKET_MAKER"ALL"statusstringoptionalFilter by status (e.g. COMPLETED, CANCELLED). Use commas for multiple.
"COMPLETED,CANCELLED"buy_offer_iduuidoptionalView history for a specific buy offer by its ID.
"f60be7f8-fc74-4b6d-a4de-a2bd28136001"{
"status": "COMPLETED",
"limit": 2
}{
"success": true,
"data": [
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"item_name": "AK-47 | Redline (Field-Tested)",
"status": "COMPLETED",
"trade_id": "28e0c9a2-df98-4524-a459-c0c4350fb100"
}
],
"meta": {
"total": 1,
"limit": 2,
"offset": 0,
"has_more": false
}
}Request URL Preview
/api/v1/buy-offers/history?status=COMPLETED&limit=2{
"success": true,
"data": [
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"item_name": "AK-47 | Redline (Field-Tested)",
"status": "COMPLETED",
"trade_id": "28e0c9a2-df98-4524-a459-c0c4350fb100"
}
],
"meta": {
"total": 1,
"limit": 2,
"offset": 0,
"has_more": false
}
}/api/v1/buy-offers/statusQuickly check the current status, remaining quantity, and fill progress for one or more buy offers (up to 50 at a time).
iduuidoptionalThe ID of the buy offer to check. You can also use buy_offer_id.
"f60be7f8-fc74-4b6d-a4de-a2bd28136001"idsarrayoptionalArray of buy offer IDs to check in bulk (up to 50).
[
"f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"f60be7f8-fc74-4b6d-a4de-a2bd28136002"
]{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001"
}{
"success": true,
"data": [
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"status": "ACTIVE",
"quantity": 2,
"matched_quantity": 0,
"remaining_quantity": 2
}
],
"meta": {
"total": 1
}
}{
"ids": [
"f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"f60be7f8-fc74-4b6d-a4de-a2bd28136002"
]
}{
"success": true,
"data": [
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"status": "ACTIVE",
"quantity": 2,
"matched_quantity": 0,
"remaining_quantity": 2
},
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136002",
"status": "COMPLETED",
"trade_id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001"
}
],
"meta": {
"total": 2
}
}Request URL Preview
/api/v1/buy-offers/status{
"success": true,
"data": [
{
"id": "f60be7f8-fc74-4b6d-a4de-a2bd28136001",
"status": "ACTIVE",
"quantity": 2,
"matched_quantity": 0,
"remaining_quantity": 2
}
],
"meta": {
"total": 1
}
}Track, manage, and interact with your active and past trades.
/api/v1/trades/activeView your in-progress trades as a buyer, seller, or both. Use the action_required role filter to see trades that need your attention, such as pending acceptances.
Notes
Valid trade statuses include: AWAITING_TRADE_LOCK_EXPIRY, SELLER_ACCEPTS_SALE, SELLER_SENT_TRADE_OFFER, and TRADE_VERIFIED
Deferred-delivery trades use AWAITING_TRADE_LOCK_EXPIRY and include tradable_after as an ISO timestamp. Delivery is sent automatically after that time.
Trades with status set to TRADE_VERIFIED will also return a protection_end_time timestamp revealing when escrow for the trade will expire (when the trade is paid out).
For each trade, a listing_unique_id is returned which is a SHA-256 hash of floatvalue + "_" + paintseed + "_" + defindex + "_" + paintindex + "_" + steamid
Use game to view one game's active trades.
Gifted trades return gifted_item: true and the resolved delivery_steamid. The custom trade URL/token is not returned.
order_number contains the developer order number supplied to /api/v1/buy/initiate when the authenticated account is the buyer. It is null for sellers and purchases without an order number.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"roleenumoptionalShow trades where you are the buyer, seller, both, or only trades needing your action.
buyersellerbothaction_required"both"statusstringoptionalFilter by a specific trade status (e.g. TRADE_VERIFIED).
"TRADE_VERIFIED"trade_iduuidoptionalFetch a specific trade by its ID. You can also use id.
"28e0c9a2-df98-4524-a459-c0c4350fb100"{
"role": "both",
"limit": 2,
"offset": 0
}{
"success": true,
"data": [
{
"id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"order_number": "DEV-ORDER-1001",
"hash_name": "AK-47 | Redline (Field-Tested)",
"game_slug": "cs2",
"listing_unique_id": "011ab7330be0c30d40903ed77cc8a75b0c9f31d1fc59970c3418621df1a865bb",
"original_assetid": "16944200343",
"new_assetid": "17000123456",
"checkpoint_id": "4a84b685-2404-4a9d-828a-75e26b796889",
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"imageurl": "https://community.cloudflare.steamstatic.com/economy/image/example",
"floatvalue": 0.1234,
"paintseed": 321,
"paintindex": 44,
"price": 42.5,
"status": "TRADE_VERIFIED",
"category": "BUY_NOW",
"protection_end_time": "2026-04-12T09:10:11.000Z",
"tradable_after": null,
"created_at": "2026-04-08T09:10:11.000Z",
"updated_at": "2026-04-08T09:15:42.000Z",
"seller": {
"steamid": "76561198000000001",
"name": "Example Seller",
"avatar": "https://avatars.steamstatic.com/example_full.jpg",
"reputation": 125.5
}
}
],
"meta": {
"limit": 2,
"offset": 0
}
}Request URL Preview
/api/v1/trades/active?role=both&limit=2&offset=0{
"success": true,
"data": [
{
"id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"order_number": "DEV-ORDER-1001",
"hash_name": "AK-47 | Redline (Field-Tested)",
"game_slug": "cs2",
"listing_unique_id": "011ab7330be0c30d40903ed77cc8a75b0c9f31d1fc59970c3418621df1a865bb",
"original_assetid": "16944200343",
"new_assetid": "17000123456",
"checkpoint_id": "4a84b685-2404-4a9d-828a-75e26b796889",
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"imageurl": "https://community.cloudflare.steamstatic.com/economy/image/example",
"floatvalue": 0.1234,
"paintseed": 321,
"paintindex": 44,
"price": 42.5,
"status": "TRADE_VERIFIED",
"category": "BUY_NOW",
"protection_end_time": "2026-04-12T09:10:11.000Z",
"tradable_after": null,
"created_at": "2026-04-08T09:10:11.000Z",
"updated_at": "2026-04-08T09:15:42.000Z",
"seller": {
"steamid": "76561198000000001",
"name": "Example Seller",
"avatar": "https://avatars.steamstatic.com/example_full.jpg",
"reputation": 125.5
}
}
],
"meta": {
"limit": 2,
"offset": 0
}
}/api/v1/trades/historyView your completed and archived trade history. Filter by role (buyer or seller) and date range to find past transactions.
Notes
Valid trade statuses are: SELLER_DECLINED, BUYER_CANCELLED, PAYMENT_SENT, REVERSED, and CANCELLED_DUE_TO_BAN
For each trade, a listing_unique_id is returned which is a SHA-256 hash of floatvalue + "_" + paintseed + "_" + defindex + "_" + paintindex + "_" + steamid
Use game to view one game's trade history.
Archived gifted trades retain gifted_item and delivery_steamid.
order_number contains the developer order number supplied to /api/v1/buy/initiate when the authenticated account was the buyer. It is null for sellers and purchases without an order number.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"roleenumoptionalShow trades where you were the buyer, seller, or both.
buyersellerboth"seller"from_datestringoptionalOnly show trades created on or after this date (ISO format).
"2026-04-01T00:00:00.000Z"to_datestringoptionalOnly show trades created on or before this date (ISO format).
"2026-04-08T23:59:59.999Z"{
"role": "both",
"limit": 2
}{
"success": true,
"data": [
{
"id": "8bb7b870-8a07-4c9f-bdfd-f32b5e4bc001",
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"order_number": "DEV-ORDER-1001",
"hash_name": "AK-47 | Redline (Field-Tested)",
"game_slug": "cs2",
"listing_unique_id": "011ab7330be0c30d40903ed77cc8a75b0c9f31d1fc59970c3418621df1a865bb",
"original_assetid": "16944200343",
"new_assetid": "17000123456",
"checkpoint_id": "4a84b685-2404-4a9d-828a-75e26b796889",
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"imageurl": "https://community.cloudflare.steamstatic.com/economy/image/example",
"floatvalue": 0.1234,
"paintseed": 321,
"paintindex": 44,
"price": 42.5,
"status": "PAYMENT_SENT",
"category": "BUY_NOW",
"protection_end_time": "2026-04-12T09:10:11.000Z",
"tradable_after": null,
"created_at": "2026-04-08T09:10:11.000Z",
"updated_at": "2026-04-12T09:10:11.000Z",
"seller": {
"steamid": "76561198000000001",
"name": "Example Seller",
"avatar": "https://avatars.steamstatic.com/example_full.jpg",
"reputation": 125.5
}
}
],
"meta": {
"limit": 2,
"offset": 0
}
}Request URL Preview
/api/v1/trades/history?role=both&limit=2{
"success": true,
"data": [
{
"id": "8bb7b870-8a07-4c9f-bdfd-f32b5e4bc001",
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"order_number": "DEV-ORDER-1001",
"hash_name": "AK-47 | Redline (Field-Tested)",
"game_slug": "cs2",
"listing_unique_id": "011ab7330be0c30d40903ed77cc8a75b0c9f31d1fc59970c3418621df1a865bb",
"original_assetid": "16944200343",
"new_assetid": "17000123456",
"checkpoint_id": "4a84b685-2404-4a9d-828a-75e26b796889",
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"imageurl": "https://community.cloudflare.steamstatic.com/economy/image/example",
"floatvalue": 0.1234,
"paintseed": 321,
"paintindex": 44,
"price": 42.5,
"status": "PAYMENT_SENT",
"category": "BUY_NOW",
"protection_end_time": "2026-04-12T09:10:11.000Z",
"tradable_after": null,
"created_at": "2026-04-08T09:10:11.000Z",
"updated_at": "2026-04-12T09:10:11.000Z",
"seller": {
"steamid": "76561198000000001",
"name": "Example Seller",
"avatar": "https://avatars.steamstatic.com/example_full.jpg",
"reputation": 125.5
}
}
],
"meta": {
"limit": 2,
"offset": 0
}
}/api/v1/trades/interactTake action on a trade. Sellers can accept or decline incoming trades, and buyers can request a refund if the trade has been pending long enough.
trade_iduuidrequiredThe ID of the trade you want to act on.
"28e0c9a2-df98-4524-a459-c0c4350fb100"actionenumrequiredThe action to take: ACCEPT or DECLINE (sellers), or REFUND (buyers).
ACCEPTDECLINEREFUND"ACCEPT"{
"trade_id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"action": "ACCEPT"
}{
"success": true,
"message": "Trade accepted successfully, please use the Dupe mobile app to fulfill the item to the buyer ASAP"
}{
"trade_id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"action": "ACCEPT"
}{
"success": true,
"message": "Trade accepted successfully.",
"tradelink": "https://steamcommunity.com/tradeoffer/new/?partner=12345678&token=token123"
}{
"trade_id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"action": "REFUND"
}{
"success": true,
"message": "Trade refunded successfully."
}Request URL Preview
/api/v1/trades/interact{
"success": true,
"message": "Trade accepted successfully, please use the Dupe mobile app to fulfill the item to the buyer ASAP"
}/api/v1/trades/statusLook up the current status of one or more trades by ID (up to 50 at a time). Works for both active and completed trades.
Notes
Trades with status set to TRADE_VERIFIED will also return a protection_end_time timestamp revealing when escrow for the trade will expire (when the trade is paid out).
A deferred-delivery trade returns AWAITING_TRADE_LOCK_EXPIRY with a tradable_after ISO timestamp until custodial fulfillment begins.
For each trade, a listing_unique_id is returned which is a SHA-256 hash of floatvalue + "_" + paintseed + "_" + defindex + "_" + paintindex + "_" + steamid
order_number contains the developer order number supplied to /api/v1/buy/initiate when the authenticated account is the buyer. It is null for sellers, legacy purchases, and unknown trade IDs.
trade_iduuidoptionalThe ID of the trade to check. You can also use id.
"28e0c9a2-df98-4524-a459-c0c4350fb100"trade_idsarrayoptionalArray of trade IDs to check in bulk (up to 50). You can also use ids.
[
"28e0c9a2-df98-4524-a459-c0c4350fb100",
"28e0c9a2-df98-4524-a459-c0c4350fb101"
]{
"trade_id": "28e0c9a2-df98-4524-a459-c0c4350fb100"
}{
"success": true,
"data": [
{
"id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"order_number": "DEV-ORDER-1001",
"hash_name": "AK-47 | Redline (Field-Tested)",
"listing_unique_id": "011ab7330be0c30d40903ed77cc8a75b0c9f31d1fc59970c3418621df1a865bb",
"original_assetid": "16944200343",
"new_assetid": "17000123456",
"floatvalue": 0.1234,
"paintseed": 321,
"paintindex": 44,
"price": 42.5,
"status": "TRADE_VERIFIED",
"protection_end_time": "2026-04-12T09:10:11.000Z"
}
],
"meta": {
"total": 1
}
}{
"trade_ids": [
"28e0c9a2-df98-4524-a459-c0c4350fb100",
"28e0c9a2-df98-4524-a459-c0c4350fb101"
]
}{
"success": true,
"data": [
{
"id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"order_number": "DEV-ORDER-1001",
"listing_unique_id": "011ab7330be0c30d40903ed77cc8a75b0c9f31d1fc59970c3418621df1a865bb",
"original_assetid": "16944200343",
"new_assetid": "17000123456",
"floatvalue": 0.1234,
"paintseed": 321,
"paintindex": 44,
"status": "TRADE_VERIFIED",
"protection_end_time": "2026-04-12T09:10:11.000Z"
},
{
"id": "28e0c9a2-df98-4524-a459-c0c4350fb101",
"order_number": null,
"listing_unique_id": null,
"original_assetid": null,
"new_assetid": null,
"floatvalue": null,
"paintseed": null,
"paintindex": null,
"status": "NOT_FOUND",
"protection_end_time": null
}
],
"meta": {
"total": 2
}
}Request URL Preview
/api/v1/trades/status{
"success": true,
"data": [
{
"id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"order_number": "DEV-ORDER-1001",
"hash_name": "AK-47 | Redline (Field-Tested)",
"listing_unique_id": "011ab7330be0c30d40903ed77cc8a75b0c9f31d1fc59970c3418621df1a865bb",
"original_assetid": "16944200343",
"new_assetid": "17000123456",
"floatvalue": 0.1234,
"paintseed": 321,
"paintindex": 44,
"price": 42.5,
"status": "TRADE_VERIFIED",
"protection_end_time": "2026-04-12T09:10:11.000Z"
}
],
"meta": {
"total": 1
}
}View your USDC payment records on Dupe.
/api/v1/transactionsView your USDC payment history on Dupe, including pending, completed, and expired transactions. Filter by an exact developer-supplied order number when needed. Gifted purchases include gifted_item and their resolved delivery_steamid; trade tokens are never returned.
limitintegeroptionalHow many transactions to return per page. Defaults to 100, max 500.
25offsetintegeroptionalNumber of transactions to skip for pagination. Starts at 0.
0order_numberstringoptionalExact, case-sensitive developer order number supplied during purchase initiation.
"DEV-ORDER-1001"{
"limit": 2,
"offset": 0,
"order_number": "DEV-ORDER-1001"
}{
"success": true,
"data": {
"transactions": [
{
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"order_number": "DEV-ORDER-1001",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"expires_at": "2026-04-08T12:05:00.000Z",
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"items": [
{
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"seller": "76561198000000001"
}
]
}
],
"count": 1,
"limit": 2,
"offset": 0
}
}Request URL Preview
/api/v1/transactions?limit=2&offset=0&order_number=DEV-ORDER-1001{
"success": true,
"data": {
"transactions": [
{
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"order_number": "DEV-ORDER-1001",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"expires_at": "2026-04-08T12:05:00.000Z",
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"items": [
{
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"seller": "76561198000000001"
}
]
}
],
"count": 1,
"limit": 2,
"offset": 0
}
}/api/v1/transactions/[order_number]Look up a specific payment transaction using the custom order number supplied during initiation. Gifted purchases expose the resolved recipient Steam ID, not the recipient trade token.
order_numberstringrequiredThe developer order number to look up.
"DEV-ORDER-1001"{
"success": true,
"data": {
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"order_number": "DEV-ORDER-1001",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"items": [
{
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"seller": "76561198000000001"
}
]
}
}Request URL Preview
/api/v1/transactions/DEV-ORDER-1001{
"success": true,
"data": {
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"order_number": "DEV-ORDER-1001",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"gifted_item": true,
"delivery_steamid": "76561199545512381",
"items": [
{
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"seller": "76561198000000001"
}
]
}
}/api/v1/transactions/[signature]Look up a specific payment transaction using its Solana transaction signature. Gifted purchases expose the resolved recipient Steam ID, not the recipient trade token.
signaturestringrequiredThe Solana transaction signature to look up.
"3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz"{
"success": true,
"data": {
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"order_number": "DEV-ORDER-1001",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"items": [
{
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"seller": "76561198000000001"
}
]
}
}Request URL Preview
/api/v1/transactions/3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz{
"success": true,
"data": {
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"order_number": "DEV-ORDER-1001",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"items": [
{
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"seller": "76561198000000001"
}
]
}
}Access your wallet balance, Steam inventory, custodied items, and custody withdrawal tools.
/api/v1/user/usdc-balanceFetch the USDC funds available in your wallet. Alternatively, you can also manually fetch this information using your own Solana RPC
convert_tostringoptionalEstimates the value of your USDC balance in the requested FIAT currency. The returned value is an approximation based on the latest available rates.
"CNY"Invalid currency, unavailable conversion rate, or user wallet not found.
Failed to fetch USDC balance. Please try again.
{
"success": true,
"data": {
"balance": 100,
"currency": "USDC"
}
}{
"convert_to": "CNY"
}{
"success": true,
"data": {
"balance": 100,
"currency": "USDC",
"convert_to": "CNY",
"converted_value": 677
}
}Request URL Preview
/api/v1/user/usdc-balance{
"success": true,
"data": {
"balance": 100,
"currency": "USDC"
}
}/api/v1/user/inventoryFetch your Steam inventory for the scoped game. CS2 items include float, sticker, and inspect metadata; non-CS2 games return normalized item metadata and game-aware recommended sell prices where available.
Notes
This endpoint is not available for anonymous Dupe accounts.
By default, only tradable items are returned and items already listed on Dupe are excluded.
Use game=sbox or game=590830 for S&box inventory. Non-CS2 inventory skips CS2 inspect and float enrichment.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"tradablebooleanoptionalWhen true, only returns items that are currently tradable on Steam. Defaults to true.
trueexcludeListingsbooleanoptionalWhen true, hides items you've already listed on Dupe. Defaults to true.
true{
"tradable": true,
"excludeListings": true
}{
"success": true,
"data": {
"items": [
{
"s": "76561198119723126",
"a": "16944200343",
"d": "steam://run/730//+csgo_econ_action_preview%20C0D057350F4FFFD83CC3E05BC3E8C6F0C3F815417132C38009C5A888B0C8E152A0D4/S76561198119723126",
"hash_name": "★ M9 Bayonet | Damascus Steel (Field-Tested)",
"grade": "covert",
"tradable": true,
"inspect": {
"origin": 8,
"quality": 3,
"rarity": 6,
"a": "16944200343",
"d": "9520715171647454688",
"paintseed": 713,
"defindex": 508,
"paintindex": 411,
"stickers": [],
"low_rank": 7,
"high_rank": 8,
"floatvalue": 0.1994660645723343,
"s": "76561198119723126",
"m": "0",
"imageurl": "http://media.steampowered.com/apps/730/icons/econ/default_generated/weapon_knife_m9_bayonet_aq_damascus_90_light_large.c8510c6e031c61d9c1c2421df3b912125547dc83.png",
"min": 0,
"max": 0.5,
"weapon_type": "M9 Bayonet",
"item_name": "Damascus Steel",
"rarity_name": "Covert",
"quality_name": "★",
"origin_name": "Found in Crate",
"wear_name": "Field-Tested",
"full_item_name": "★ M9 Bayonet | Damascus Steel (Field-Tested)"
},
"unique_item_id": "fa94b0a0acb00051a840d8325f6c64d7df137c4e52a9d86ae3fc884891887189",
"recommended_p2p_price": 442.4,
"insta_sell": 417.57
}
],
"failedItems": []
}
}Request URL Preview
/api/v1/user/inventory?tradable=true&excludeListings=true{
"success": true,
"data": {
"items": [
{
"s": "76561198119723126",
"a": "16944200343",
"d": "steam://run/730//+csgo_econ_action_preview%20C0D057350F4FFFD83CC3E05BC3E8C6F0C3F815417132C38009C5A888B0C8E152A0D4/S76561198119723126",
"hash_name": "★ M9 Bayonet | Damascus Steel (Field-Tested)",
"grade": "covert",
"tradable": true,
"inspect": {
"origin": 8,
"quality": 3,
"rarity": 6,
"a": "16944200343",
"d": "9520715171647454688",
"paintseed": 713,
"defindex": 508,
"paintindex": 411,
"stickers": [],
"low_rank": 7,
"high_rank": 8,
"floatvalue": 0.1994660645723343,
"s": "76561198119723126",
"m": "0",
"imageurl": "http://media.steampowered.com/apps/730/icons/econ/default_generated/weapon_knife_m9_bayonet_aq_damascus_90_light_large.c8510c6e031c61d9c1c2421df3b912125547dc83.png",
"min": 0,
"max": 0.5,
"weapon_type": "M9 Bayonet",
"item_name": "Damascus Steel",
"rarity_name": "Covert",
"quality_name": "★",
"origin_name": "Found in Crate",
"wear_name": "Field-Tested",
"full_item_name": "★ M9 Bayonet | Damascus Steel (Field-Tested)"
},
"unique_item_id": "fa94b0a0acb00051a840d8325f6c64d7df137c4e52a9d86ae3fc884891887189",
"recommended_p2p_price": 442.4,
"insta_sell": 417.57
}
],
"failedItems": []
}
}/api/v1/user/custodyView items that Dupe is holding in custody for you, including when each item becomes eligible for withdrawal.
Notes
Use game to view custodied items for one game.
Check fast_sell_enabled before offering Fast Sell for an item.
fast_sell_price is an estimate. The final price is calculated when the listing is created.
If Fast Sell is unavailable, fast_sell_unavailable_reason explains why.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"{
"success": true,
"data": [
{
"asset_id": "50403059086",
"old_asset_id": "46685268061",
"hash_name": "UMP-45 | Urban DDPAT (Minimal Wear)",
"item_value": 0.02,
"custodian_steamid": "76561199669917115",
"inspect": {
"a": "50403059086",
"d": "7415363990670646988",
"m": "0",
"s": "76561199669917115",
"max": 0.8,
"min": 0.06,
"origin": 24,
"rarity": 1,
"quality": 4,
"defindex": 24,
"imageurl": "http://media.steampowered.com/apps/730/icons/econ/default_generated/weapon_ump45_hy_ddpat_urb_light_large.2a86a32be1865ab7757d80bfbee44c80662ee4d9.png",
"low_rank": 2,
"stickers": [],
"high_rank": 90,
"item_name": "Urban DDPAT",
"keychains": [],
"paintseed": 219,
"wear_name": "Minimal Wear",
"floatvalue": 0.09543440490961075,
"paintindex": 17,
"origin_name": "Level Up Reward",
"rarity_name": "Consumer Grade",
"weapon_type": "UMP-45",
"quality_name": "Unique",
"full_item_name": "UMP-45 | Urban DDPAT (Minimal Wear)"
},
"stickers": [],
"keychains": [],
"fast_sell_enabled": true,
"fast_sell_price": 0.02,
"withdrawable_at": "2026-03-24T20:12:00.000Z",
"deposit_timestamp": 1773716863982
}
]
}Request URL Preview
/api/v1/user/custody{
"success": true,
"data": [
{
"asset_id": "50403059086",
"old_asset_id": "46685268061",
"hash_name": "UMP-45 | Urban DDPAT (Minimal Wear)",
"item_value": 0.02,
"custodian_steamid": "76561199669917115",
"inspect": {
"a": "50403059086",
"d": "7415363990670646988",
"m": "0",
"s": "76561199669917115",
"max": 0.8,
"min": 0.06,
"origin": 24,
"rarity": 1,
"quality": 4,
"defindex": 24,
"imageurl": "http://media.steampowered.com/apps/730/icons/econ/default_generated/weapon_ump45_hy_ddpat_urb_light_large.2a86a32be1865ab7757d80bfbee44c80662ee4d9.png",
"low_rank": 2,
"stickers": [],
"high_rank": 90,
"item_name": "Urban DDPAT",
"keychains": [],
"paintseed": 219,
"wear_name": "Minimal Wear",
"floatvalue": 0.09543440490961075,
"paintindex": 17,
"origin_name": "Level Up Reward",
"rarity_name": "Consumer Grade",
"weapon_type": "UMP-45",
"quality_name": "Unique",
"full_item_name": "UMP-45 | Urban DDPAT (Minimal Wear)"
},
"stickers": [],
"keychains": [],
"fast_sell_enabled": true,
"fast_sell_price": 0.02,
"withdrawable_at": "2026-03-24T20:12:00.000Z",
"deposit_timestamp": 1773716863982
}
]
}/api/v1/user/custody/withdraw-statusCheck the progress of one or more custody withdrawals. Returns the Steam trade offer status, trade URL, expiry time, and bot details for each asset.
Notes
Possible withdrawal statuses are: SENT, DECLINED, SUCCESS, EXPIRED, and CANCELLED
asset_idstringoptionalThe asset ID of a single withdrawal to check.
"50403059086"asset_idsarrayoptionalArray of asset IDs to check in bulk (up to 50).
[
"50403059086",
"50336425684"
]Provide asset_id for a single lookup or asset_ids for a bulk lookup.
At most 50 items per request.
Unauthorized: No API key provided in Authorization header
Failed to fetch custody withdraw statuses. Please try again.
{
"asset_id": "50403059086"
}{
"success": true,
"data": [
{
"trade_offer_id": "9002188439",
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=1585246653&token=32ddh32D",
"withdraw_expiry": 1775812871684,
"trade_hash": "436393e43824b39e227baa9abaf3559c",
"withdraw_status": "SENT",
"asset_id": "50403059086",
"bot_steam_id": "76561199669917115"
}
],
"meta": {
"total": 1
}
}{
"asset_ids": [
"50403059086",
"50336425684"
]
}{
"success": true,
"data": [
{
"trade_offer_id": "9002188439",
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=1585246653&token=32ddh32D",
"withdraw_expiry": 1775812871684,
"trade_hash": "436393e43824b39e227baa9abaf3559c",
"withdraw_status": "DECLINED",
"asset_id": "50403059086",
"bot_steam_id": "76561199669917115"
},
{
"trade_offer_id": "9000067352",
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=159457398&token=32ddh32D",
"withdraw_expiry": 1775745726857,
"trade_hash": "ad59928db887ecd1e8789b27614ec3a7",
"withdraw_status": "SENT",
"asset_id": "50336425684",
"bot_steam_id": "76561199669917115"
}
],
"meta": {
"total": 2
}
}Request URL Preview
/api/v1/user/custody/withdraw-status{
"success": true,
"data": [
{
"trade_offer_id": "9002188439",
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=1585246653&token=32ddh32D",
"withdraw_expiry": 1775812871684,
"trade_hash": "436393e43824b39e227baa9abaf3559c",
"withdraw_status": "SENT",
"asset_id": "50403059086",
"bot_steam_id": "76561199669917115"
}
],
"meta": {
"total": 1
}
}Withdrawing a custodied item from Dupe is a two-step, signature-verified process. You ask Dupe to build a canonical withdraw message, sign it with your Solana wallet to prove ownership, then send the signature back to trigger delivery via Steam trade offer.
/api/v1/user/custodyBrowse your custodied items with GET /api/v1/user/custody to see which items are held by Dupe and whether they are eligible for withdrawal.
/api/v1/user/custody/withdraw-initiatePOST your asset ID(s) and Steam trade URL to /api/v1/user/custody/withdraw-initiate. Dupe validates ownership, builds a canonical message string, and returns it along with a timestamp. You will sign this exact message in the next step.
Use your Solana wallet to produce a detached Ed25519 signature over the message from step 2. The signing key must be the wallet registered to your Dupe account.
/api/v1/user/custody/withdraw-executePOST the original message, your signature, public key, timestamp, asset IDs, and trade URL to /api/v1/user/custody/withdraw-execute. Dupe verifies the signature and dispatches a Steam trade offer to deliver the item(s).
/api/v1/user/custody/withdraw-statusPOST the same asset ID(s) to /api/v1/user/custody/withdraw-status to fetch the latest trade offer id, trade URL, expiry, hash, and withdraw status for each asset you own.
A Steam trade offer is sent to the trade URL you provided. Accept it in Steam to receive your item(s).
/api/v1/user/custody/withdraw-initiateStart a withdrawal of custodied items. Dupe generates a message that you must sign with your Solana wallet to prove ownership before the withdrawal can proceed.
asset_idsarrayrequiredThe asset IDs of the custodied items you want to withdraw.
[
"3141592653",
"3141592654"
]trade_urlstringrequiredYour Steam trade URL where the items will be sent.
"https://steamcommunity.com/tradeoffer/new/?partner=12345678&token=token123"{
"asset_ids": [
"3141592653"
],
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=12345678&token=token123"
}{
"success": true,
"data": {
"mode": "single",
"public_key": "7wCYw8B1g6QAZ2c2tQF8mWbQx9x8u3xVhMaq7Qe9e3uV",
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=12345678&token=token123",
"timestamp": 1775651234567,
"message": "Withdraw single custody item ...",
"asset_ids": [
"3141592653"
],
"items": [
{
"asset_id": "3141592653",
"bot_steam_id": "76561199000000001"
}
]
}
}Request URL Preview
/api/v1/user/custody/withdraw-initiate{
"success": true,
"data": {
"mode": "single",
"public_key": "7wCYw8B1g6QAZ2c2tQF8mWbQx9x8u3xVhMaq7Qe9e3uV",
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=12345678&token=token123",
"timestamp": 1775651234567,
"message": "Withdraw single custody item ...",
"asset_ids": [
"3141592653"
],
"items": [
{
"asset_id": "3141592653",
"bot_steam_id": "76561199000000001"
}
]
}
}/api/v1/user/custody/withdraw-executeComplete a custody withdrawal by submitting your signed message from the initiate step. Once verified, Dupe sends a Steam trade offer to deliver the item(s) to you.
asset_idsarrayrequiredThe same asset IDs from the initiate step.
[
"3141592653"
]trade_urlstringrequiredYour Steam trade URL (must match the initiate step).
"https://steamcommunity.com/tradeoffer/new/?partner=12345678&token=token123"public_keystringrequiredYour Solana wallet public key that signed the message.
"7wCYw8B1g6QAZ2c2tQF8mWbQx9x8u3xVhMaq7Qe9e3uV"signaturestringrequiredThe Ed25519 signature you produced by signing the message from the initiate step.
"5nY7PjNf...base58sig"messagestringrequiredThe exact message string returned by the initiate step.
"Withdraw single custody item ..."timestampnumberrequiredThe timestamp returned by the initiate step.
1775651234567{
"asset_ids": [
"3141592653"
],
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=12345678&token=token123",
"public_key": "7wCYw8B1g6QAZ2c2tQF8mWbQx9x8u3xVhMaq7Qe9e3uV",
"signature": "5nY7PjNf...base58sig",
"message": "Withdraw single custody item ...",
"timestamp": 1775651234567
}{
"success": true,
"data": {
"mode": "single",
"processed": [
{
"asset_id": "3141592653",
"success": true,
"bot_steam_id": "76561199000000001"
}
],
"failed": []
}
}Request URL Preview
/api/v1/user/custody/withdraw-execute{
"success": true,
"data": {
"mode": "single",
"processed": [
{
"asset_id": "3141592653",
"success": true,
"bot_steam_id": "76561199000000001"
}
],
"failed": []
}
}