SNKRDUNK API & Scraper
The SNKRDUNK API turns snkrdunk.com, Japan's largest sneaker and trading-card marketplace, into clean JSON in ten actions.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search takes a card name, set, character, sneaker model or product number and returns catalogue rows with the product id, the site code, the product URL, the name, the product number, the current floor price in US dollars, the live listing count, the offer count, the release date and the image; the sneaker matches come back too when include_sneakers is set. product/detail returns one product by numeric id, SW code or snkrdunk URL, with its brand, category, images and description, and can merge the floor price per grade and the other prints of the same card into the same call. product/listings is the order book: every live listing with listing_id, price_usd, price_display, currency, condition (PSA 10, A, B, C, D), the seller's condition note, size, is_sold and is_new. prices_by_condition returns the floor price for each grade of one card, which is the row a daily price tracker stores, and products/batch asks for up to 30 products in ONE call and reports back requested, returned and the ids that are missing. product/variations lists the other prints and variants of a card, browse walks the used card market by brand and category without a keyword, brand/products pages a whole brand catalogue per department (tradingCard, sneaker or streetwear), brand/detail returns the category ids that browse takes, and conditions returns the grade enum itself. What the source does not publish, this API does not invent: there are no sold prices, no price history, no offers and no rankings, so what you get is live listings and current floors. No SNKRDUNK account, no browser, one ReefAPI key and the standard { ok, data, meta, error } envelope.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/snkrdunk/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "pikachu"
}
}{
"ok": true,
"meta": {
"api": "snkrdunk",
"endpoint": "search",
"mode": "live",
"latency_ms": 1799.8,
"record_count": 30,
"bytes": 20341,
"cache_hit": false,
"stop_reason": "limit_reached",
"total": 1209,
"charged_credits": 1,
"version": "1.0.0"
},
"data": {
"results": [
{
"product_id": "882279",
"code": "SW---882279",
"url": "https://snkrdunk.com/en/trading-cards/882279",
"name": "Pikachu ex SAR [M6a 126/103](Expansion Pack \"30th CELEBRATION\")",
"product_number": null,
"is_trading_card": true,
"min_price_usd": 56,
"min_price_display": "US $56",
"listing_count": 99,
"all_listing_count": 99,
"offer_count": 0,
"count_is_lower_bound": true,
"released_at": null,
"is_new_release": false,
"below_regular_price": false,
"image": "https://cdn.snkrdunk.com/upload_bg_removed/6cce5089-c05a-47ab-8da2-02d22ab98861.webp?size=m"
},
{
"product_id": "882280",
"code": "SW---882280",
"url": "https://snkrdunk.com/en/trading-cards/882280",
"name": "Pikachu ex SAR [M6a 127/103](Expansion Pack \"30th CELEBRATION\")",
"product_number": null,
"is_trading_card": true,
"min_price_usd": 67,
"min_price_display": "US $67",
"listing_count": 99,
"all_listing_count": 99,
"offer_count": 0,
"count_is_lower_bound": true,
"released_at": null,
"is_new_release": false,
"below_regular_price": false,
"image": "https://cdn.snkrdunk.com/upload_bg_removed/a0163a22-6e45-41dc-8203-a5dd647af7ef.webp?size=m"
},
{
"product_id": "618446",
"code": "SW---618446",
"url": "https://snkrdunk.com/en/trading-cards/618446",
"name": "Hiroshima's Pikachu P [SV-P 261](Special Box \"Pokemon Center Hiroshima\")",
"product_number": null,
"is_trading_card": true,
"min_price_usd": 66,
"min_price_display": "US $66",
"listing_count": 99,
"all_listing_count": 99,
"offer_count": 0,
"count_is_lower_bound": true,
"released_at": null,
"is_new_release": false,
"below_regular_price": false,
"image": "https://cdn.snkrdunk.com/upload_bg_removed/03ca1006-0770-4d13-95c3-e33a838d5173.webp?size=m"
}
],
"total": 1209,
"page": 1,
"limit": 30,
"query": "pikachu"
}
}What the SNKRDUNK API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search SNKRDUNK by keyword. Returns trading cards (and, when `include_sneakers` is on, sneakers) with the current floor price, the live listing count and the id you feed into every other action. `total` is the source's own match count, so you can page through a whole set. | Pricing teams call search to search SNKRDUNK by keyword. | query, page, limit, include_sneakers |
| product/detail | One product record by id, code or URL: name, product number, brand, the current floor price, how many listings are live and the images. Optionally merges the floor price per grade and the other prints of the same card in the SAME call. | Marketplace operators call product/detail to get one product record by id, code or URL. | product_id, include_prices, include_variations |
| product/listings | Every live listing on one product: price in USD, grade (PSA 10, A, B, C, D), whether it is still for sale and an opaque listing id. This is the order book a pricing model reads, and the only place the source publishes individual asks. | Catalog enrichment teams call product/listings to get every live listing on one product. | product_id, page, limit, sort, only_on_sale |
| prices_by_condition | The current floor price for each grade of one card (PSA 10, A, B, C, D and the rest). One small call per card, which is what a daily price tracker stores. | Retail analysts call prices_by_condition to get the current floor price for each grade of one card (PSA 10, A, B, C, D and the rest). | product_id |
| products/batch | Up to 30 products in ONE call: name, floor price, listing count and image for each. This is how a catalogue of thousands is refreshed without spending a call per card. Ids that no longer exist are simply absent from the answer. | Pricing teams call products/batch to get up to 30 products in ONE call. | product_ids |
| product/variations | The other prints and variants of the same card (or the other colourways of a sneaker), each with its own id and floor price. | Marketplace operators call product/variations to get the other prints and variants of the same card (or the other colourways of a sneaker), each w…. | product_id |
| browse | Walk the used trading-card market: every card with a live listing, filtered by brand and category, newest first or in the source's own order. Use it to build a catalogue without a keyword. | Catalog enrichment teams call browse to get walk the used trading-card market. | brand, category_id, page, limit, sort, ... |
| brand/products | One brand's catalogue, paged: every product SNKRDUNK carries for that brand with its floor price and listing count. With `department=tradingCard` this is the route that builds a card database set by set. | Retail analysts call brand/products to get one brand's catalogue, paged. | brand, department, page, limit |
| brand/detail | One brand record and the category ids under it — the ids `browse` takes. | Pricing teams call brand/detail to get one brand record and the category ids under it. | brand |
| conditions | The grade enum the marketplace uses (A, B, C, D and the PSA grades), with the id and key behind each label. The values `condition` fields come back as. | Marketplace operators call conditions to get the grade enum the marketplace uses (A, B, C, D and the PSA grades), with the id and key behi…. | none |
Call search from your stack
curl -X POST https://api.reefapi.com/snkrdunk/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"pikachu"}'import requests
r = requests.post(
"https://api.reefapi.com/snkrdunk/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "pikachu"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/snkrdunk/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "pikachu"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.snkrdunk.search with {"query":"pikachu"}.Who uses this API and why
- Trading-card price trackers store one row per card per day from prices_by_condition, which returns the floor price for PSA 10 and for each of the A to D grades.
- Catalogue pipelines refresh thousands of cards with products/batch, up to 30 products per call, and read the missing list to retire ids the marketplace no longer carries.
- Card shops and portfolio tools read product/listings to see every ask with its grade and its sold flag instead of pricing a card from one headline number.
- Sneaker and streetwear resale analysts read the Japanese market with include_sneakers on search and department on brand/products.
Questions developers ask before integrating
Which cards and games does the SNKRDUNK API cover?
Whatever the marketplace lists: Pokémon, Yu-Gi-Oh!, One Piece, Magic and the Japanese-only promos western marketplaces tend not to carry, plus the sneaker and streetwear half of the site. Brands are addressed by the slug in their snkrdunk URL, such as pokemon, one-piece, yu-gi-oh or nike, and brand/detail returns the category ids under a brand so browse can be narrowed to one of them.
What does the grade on a listing mean?
Every listing carries condition, which is the marketplace's own grade: PSA 10 for a graded slab, and A, B, C or D for raw cards. The conditions action returns the whole enum with the id, name and key behind each label, prices_by_condition returns the current floor for each grade of one card, and a listing can also carry the condition_note the seller typed.
Are prices in yen or in US dollars?
US dollars. This engine reads the English storefront, which prices in USD, so every listing comes back with price_usd as a number, price_display exactly as the storefront prints it, and currency. Nothing is converted here, so no exchange rate of ours sits between you and the asking price.
Can I get sales history or sold prices?
No, and the API does not pretend otherwise. SNKRDUNK does not publish sold prices, a price history, offers or rankings. What it publishes is live listings and current floors, and that is what comes back. A listing that has just sold is still visible with is_sold true, and only_on_sale true restricts a call to listings that are still for sale.
How do I track a few thousand cards without spending a call per card?
products/batch takes up to 30 product ids, codes or URLs in one call and returns the name, floor price, listing count and image for each, with requested, returned and missing so you can see which ids the marketplace no longer has. For the floor per grade you still call prices_by_condition per card, which is the smaller call.
How do I find a product id?
From search, browse, brand/products or product/variations: every row carries product_id, the SW code and the product URL. All three forms work as product_id on the other actions, so a pasted snkrdunk.com product URL is enough.
How far can I page, and can I sort by price?
Up to 100 rows per page, which is the source's own ceiling; asking for more is refused rather than silently trimmed. sort takes latest for newest first or default for the source's own order, and those are the only two orders the source actually applies. There is no sort by price, and this API does not fake one by re-ordering a single page.
What is the SNKRDUNK API?
SNKRDUNK API is a ReefAPI endpoint group for japan's sneaker and trading-card marketplace: live listings with grade and price in us dollars, floor price per grade. It returns live JSON through POST requests under /snkrdunk/v1.
Is the SNKRDUNK API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. SNKRDUNK calls use the same shared credit balance as every other ReefAPI engine.
Do I need a SNKRDUNK login or account?
No login to SNKRDUNK is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the SNKRDUNK data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the SNKRDUNK API use?
SNKRDUNK actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call SNKRDUNK from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call snkrdunk actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the SNKRDUNK API a SNKRDUNK scraper?
It is the managed alternative to a DIY SNKRDUNK scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same japan's sneaker and trading-card marketplace: live listings with grade and price in us dollars, floor price per grade back as clean JSON.