# SNKRDUNK API — live Japanese trading-card and sneaker marketplace data scraper: card search, product detail, every live listing with its grade (PSA 10, A-D) and price in USD, the floor price per grade for daily price tracking, a 30-product batch lookup and full brand catalogues from snkrdunk.com — no API key, no login

> 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.
> ReefAPI engine `snkrdunk` · 10 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/snkrdunk/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/snkrdunk/v1/search — 1 credit
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.

**Parameters:**
- `query` (string, required) — What to search for: a card name, set, character, sneaker model or product number ('charizard', 'umbreon vmax', 'one piece op-01').
- `page` (integer, optional, default 1) — 1-based page number.
- `limit` (integer, optional, default 30) — Rows per page (1-100). The source refuses more than 100.
- `include_sneakers` (boolean, optional, default false) — Also return the sneaker matches. Off by default, because the trading-card half is what this endpoint is for.

**Returns:** results[]{product_id, code, url, name, product_number, min_price_usd, listing_count, offer_count, released_at, image, is_trading_card}, sneakers[] (optional), total, page, limit

**Example request body:**
```json
{
  "query": "pikachu"
}
```

### POST https://api.reefapi.com/snkrdunk/v1/product/detail — 1 credit
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.

**Parameters:**
- `product_id` (string, optional) — The product to read. Accepts the numeric id (107574), the site code (SW---107574) or a snkrdunk.com product URL.
- `include_prices` (boolean, optional, default false) — Also return the floor price per grade (one extra upstream call).
- `include_variations` (boolean, optional, default false) — Also return the other prints/variants of this card.

**Returns:** product{product_id, code, url, name, product_number, brand, min_price_usd, listing_count, offer_count, image, images} + prices_by_condition[] (optional) + variations[] (optional)

**Example request body:**
```json
{
  "product_id": "107574"
}
```

### POST https://api.reefapi.com/snkrdunk/v1/product/listings — 1 credit
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.

**Parameters:**
- `product_id` (string, optional) — The product to read. Accepts the numeric id (107574), the site code (SW---107574) or a snkrdunk.com product URL.
- `page` (integer, optional, default 1) — 1-based page number.
- `limit` (integer, optional, default 30) — Rows per page (1-100). The source refuses more than 100.
- `sort` (string, optional, default "default") — `latest` for newest first, anything else for the source's own order. Measured: these are the only two orders the source actually applies. [one of: latest, default]
- `only_on_sale` (boolean, optional, default false) — Only listings that are still for sale. Default false, which also returns recently sold ones (each carries `is_sold`).

**Returns:** listings[]{listing_id, price_usd, price_display, currency, condition, condition_note, size, is_sold, is_new, image}, product{product_id, code, url, name} (identity only — this envelope carries no floor price or listing count; use product/detail for those), page, limit

**Example request body:**
```json
{
  "product_id": "107574"
}
```

### POST https://api.reefapi.com/snkrdunk/v1/prices_by_condition — 1 credit
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.

**Parameters:**
- `product_id` (string, optional) — The product to read. Accepts the numeric id (107574), the site code (SW---107574) or a snkrdunk.com product URL.

**Returns:** prices[]{condition_id, condition, min_price_usd, min_price_display}, product_id

**Example request body:**
```json
{
  "product_id": "107574"
}
```

### POST https://api.reefapi.com/snkrdunk/v1/products/batch — 1 credit
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.

**Parameters:**
- `product_ids` (array, required) — Up to 30 product ids, codes or URLs. Accepts a JSON array or a comma-separated string.

**Returns:** products[]{product_id, code, url, name, min_price_usd, listing_count, image}, requested, returned, missing[] (min_price_display is null here: the batch rows carry the number, not the formatted string)

**Example request body:**
```json
{
  "product_ids": [
    107574,
    128265
  ]
}
```

### POST https://api.reefapi.com/snkrdunk/v1/product/variations — 1 credit
The other prints and variants of the same card (or the other colourways of a sneaker), each with its own id and floor price.

**Parameters:**
- `product_id` (string, optional) — The product to read. Accepts the numeric id (107574), the site code (SW---107574) or a snkrdunk.com product URL.

**Returns:** variations[]{product_id, code, url, name, min_price_usd, image}

**Example request body:**
```json
{
  "product_id": "107574"
}
```

### POST https://api.reefapi.com/snkrdunk/v1/browse — 1 credit
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.

**Parameters:**
- `brand` (string, optional) — Brand slug ('pokemon', 'one-piece', 'yu-gi-oh'). Omit for all.
- `category_id` (integer, optional) — Category id from brand/detail. Omit for all categories.
- `page` (integer, optional, default 1) — 1-based page number.
- `limit` (integer, optional, default 30) — Rows per page (1-100). The source refuses more than 100.
- `sort` (string, optional, default "default") — `latest` for newest first, anything else for the source's own order. Measured: these are the only two orders the source actually applies. [one of: latest, default]
- `only_on_sale` (boolean, optional, default false) — Only listings that are still for sale. Default false, which also returns recently sold ones (each carries `is_sold`).

**Returns:** cards[]{listing_id, trading_card_id, url, name, price_usd, condition, is_sold, image}, page, limit

**Example request body:**
```json
{
  "brand": "pokemon"
}
```

### POST https://api.reefapi.com/snkrdunk/v1/brand/products — 1 credit
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.

**Parameters:**
- `brand` (string, required) — Brand slug exactly as it appears in a snkrdunk URL. Trading cards: pokemon, yu-gi-oh, onepiece, dragonball, mtg. Sneakers and apparel use their own slugs ('nike', 'supreme', 'air-jordan', 'newbalance').
- `department` (string, optional, default "tradingCard") — Which half of the marketplace to read. [one of: tradingCard, sneaker, streetwear]
- `page` (integer, optional, default 1) — 1-based page number.
- `limit` (integer, optional, default 30) — Rows per page (1-100). The source refuses more than 100.

**Returns:** results[]{product_id, code, url, name, product_number, min_price_usd, listing_count, released_at, image}, brand, page, limit

**Example request body:**
```json
{
  "brand": "pokemon",
  "department": "tradingCard"
}
```

### POST https://api.reefapi.com/snkrdunk/v1/brand/detail — 1 credit
One brand record and the category ids under it — the ids `browse` takes.

**Parameters:**
- `brand` (string, required) — Brand slug exactly as it appears in a snkrdunk URL. Trading cards: pokemon, yu-gi-oh, onepiece, dragonball, mtg. Sneakers and apparel use their own slugs ('nike', 'supreme', 'air-jordan', 'newbalance').

**Returns:** brand{id, name}, categories[]{id, name, title}

**Example request body:**
```json
{
  "brand": "pokemon"
}
```

### POST https://api.reefapi.com/snkrdunk/v1/conditions — 1 credit
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.

**Parameters:** none

**Returns:** conditions[]{id, name, key}

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=snkrdunk
- Human docs page: https://reefapi.com/docs/snkrdunk
- Overview page: https://reefapi.com/snkrdunk-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
