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.
/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 limit 50 / offset 0, capped at 500.
Rate limit is 15 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.
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.
25offsetintegeroptionalNumber of listings to skip for pagination. Starts at 0.
0listing_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
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,
"offset": 0,
"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)",
"price": 42.5,
"category": "BUY_NOW",
"asset_id": "3141592653",
"item_name": "AK-47 | Redline",
"floatvalue": 0.18,
"instant_fulfill": true,
"seller": {
"steamid": "76561198000000001",
"name": "dupe-seller",
"reputation": 154
}
}
],
"meta": {
"limit": 2,
"offset": 0
}
}Request URL Preview
/api/v1/market/get-listings?limit=2&offset=0&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)",
"price": 42.5,
"category": "BUY_NOW",
"asset_id": "3141592653",
"item_name": "AK-47 | Redline",
"floatvalue": 0.18,
"instant_fulfill": true,
"seller": {
"steamid": "76561198000000001",
"name": "dupe-seller",
"reputation": 154
}
}
],
"meta": {
"limit": 2,
"offset": 0
}
}/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/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 and your wallet address to /api/v1/buy/initiate. Dupe checks eligibility, calculates the total, and returns a serialized Solana transaction along with a unique reference key. 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 and your Solana wallet address. Dupe checks that each item is still available, 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.
walletstringrequiredYour Solana wallet address. Must match the wallet linked to your Dupe account.
"7wCYw8B1g6QAZ2c2tQF8mWbQx9x8u3xVhMaq7Qe9e3uV"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
}
]Items array is required
wallet is required
Some items are not eligible for purchase. Please remove them from your cart.
Provided wallet does not match registered user wallet
Marketplace eligibility restriction for purchase
You need the Dupe mobile app to purchase from sellers with private verification.
Failed to build transaction. Please try again.
{
"wallet": "7wCYw8B1g6QAZ2c2tQF8mWbQx9x8u3xVhMaq7Qe9e3uV",
"items": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001"
},
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd002",
"price": 19.75
}
]
}{
"success": true,
"data": {
"transaction": "AQABAgM...base64",
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"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"
}
]
}
}Request URL Preview
/api/v1/buy/initiate{
"success": true,
"data": {
"transaction": "AQABAgM...base64",
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"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). If the transaction isn't confirmed yet, retry after a few seconds.
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
Pending transaction not found. Please initiate a new purchase.
Transaction not yet visible on the expected network. Retry shortly.
Failed to execute transaction. Please try again.
{
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm"
}{
"success": true,
"data": {
"message": "Items purchased successfully.",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"trades": [
{
"id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"status": "TRADE_VERIFIED"
}
]
}
}Request URL Preview
/api/v1/buy/execute{
"success": true,
"data": {
"message": "Items purchased successfully.",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"trades": [
{
"id": "28e0c9a2-df98-4524-a459-c0c4350fb100",
"listing_id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001",
"status": "TRADE_VERIFIED"
}
]
}
}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 one or more items for sale on the Dupe.fi marketplace. Provide the Steam asset ID and your asking price for each item.
Notes
Since anonymous Dupe accounts do not have a Steam inventory, you must provide the asset ids of items within Dupe custody for your account.
Set game to list non-CS2 items. Validation uses that game's inventory and sellListings capability.
gamestringoptionalGame slug or Steam app id. Use cs2/730 or sbox/590830; omit for CS2.
"cs2"itemsarrayoptionalArray of items to list. Each entry requires a (Steam asset ID) and price (asking price in USDC). Regular P2P listings also support optional category, expire, and private on each object; allowed values for category and expire are listed below.
[
{
"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.
137147Method not allowed. Use POST.
{
"items": [
{
"a": "3141592653",
"price": 49.5
},
{
"a": "3141592654",
"price": 19.99
}
]
}{
"success": true,
"message": "Listings created successfully."
}{
"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": "Listings created successfully."
}/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 are: SELLER_ACCEPTS_SALE, SELLER_SENT_TRADE_OFFER, and TRADE_VERIFIED
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.
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",
"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",
"category": "BUY_NOW",
"protection_end_time": "2026-04-12T09:10:11.000Z"
}
],
"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",
"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",
"category": "BUY_NOW",
"protection_end_time": "2026-04-12T09:10:11.000Z"
}
],
"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.
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",
"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",
"category": "BUY_NOW"
}
],
"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",
"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",
"category": "BUY_NOW"
}
],
"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).
For each trade, a listing_unique_id is returned which is a SHA-256 hash of floatvalue + "_" + paintseed + "_" + defindex + "_" + paintindex + "_" + steamid
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",
"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",
"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",
"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",
"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.
limitintegeroptionalHow many transactions to return per page. Defaults to 100, max 500.
25offsetintegeroptionalNumber of transactions to skip for pagination. Starts at 0.
0{
"limit": 2,
"offset": 0
}{
"success": true,
"data": {
"transactions": [
{
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"expires_at": "2026-04-08T12:05:00.000Z"
}
],
"count": 1,
"limit": 2,
"offset": 0
}
}Request URL Preview
/api/v1/transactions?limit=2&offset=0{
"success": true,
"data": {
"transactions": [
{
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"expires_at": "2026-04-08T12:05:00.000Z"
}
],
"count": 1,
"limit": 2,
"offset": 0
}
}/api/v1/transactions/[signature]Look up a specific payment transaction using its Solana transaction signature.
signaturestringrequiredThe Solana transaction signature to look up.
"3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz"{
"success": true,
"data": {
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"items": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001"
}
]
}
}Request URL Preview
/api/v1/transactions/3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz{
"success": true,
"data": {
"reference": "4J5Y5seQfYB5V9zkq1mQF3S2m4f4vC7YqD6KQp7m8rLm",
"signature": "3pwQv2FvMCLiTQhPrV8nq9JxkWvQ1yx1P3h2cG4At7R9Q7Wv1A8W5mYkz",
"status": "completed",
"total_amount": "62.25",
"items": [
{
"id": "6e1b6c5d-3388-45a5-a73d-8fc66d6fd001"
}
]
}
}Access your Steam inventory, custodied items, and custody withdrawal tools.
/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.
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": [],
"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": [],
"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": []
}
}