# Dorasuta (Dragon Star) API - Japanese trading-card shop: selling price per condition (状態A / 状態C) with stock, and buy-back (買取) price, for Pokémon, Yu-Gi-Oh!, One Piece, Duel Masters, MTG, Weiß Schwarz, Digimon, Lorcana and 23 more games; card search with set, rarity, stock, sale and sort filters, item detail, buy-back list, set lists. JPY, Japanese names. No account.

> Cards and products for sale at Dorasuta in one game: name, condition (状態A or the cheaper 状態C play grade), price in JPY, stock count, rarity, shop product code, card number, set and image. Filter by keyword, set, rarity, in-stock, or one of the shop's listings (sale, damaged bargains, new releases, price reduced, collector); sort by rarity, price or name; 40 rows a page.
> ReefAPI engine `dorasuta` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/dorasuta/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.
- **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). Clients that add connectors by URL, such as ChatGPT and the Claude app, connect with OAuth 2.1 (the user pastes their key once on a ReefAPI page; discovery at `/.well-known/oauth-protected-resource/mcp`). Config files send the key as `Authorization: Bearer <key>`. `?key=<key>` in the URL also works as a last-resort fallback.

## Endpoints

### POST https://api.reefapi.com/dorasuta/v1/search — 2 credits
Cards and products for sale at Dorasuta in one game: name, condition (状態A or the cheaper 状態C play grade), price in JPY, stock count, rarity, shop product code, card number, set and image. Filter by keyword, set, rarity, in-stock, or one of the shop's listings (sale, damaged bargains, new releases, price reduced, collector); sort by rarity, price or name; 40 rows a page.

**Parameters:**
- `game` (enum, required) — Card game, as the shop's own path name (pokemon-card, yugioh-jp, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, ...). Short names such as pokemon, yugioh, onepiece, lorcana are accepted too. [one of: pokemon-card, yugioh-jp, yugioh-rushduel, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, vanguard, digimon, disneylorcana, union-arena, hololive-official-cardgame, gundam-gcg, gundam-ab, dbs-cardgame-fw, dbsdv, battlespirits, shadowverse-evolve, wixoss, ultraman-cardgame, acgtcg, build-divide, mushijingi, xross-stars, conan-cardgame, haikyuvobacabreak, palworld-official-cardgame, llofficial-cardgame, ijinden, senkaisengi, horobeat-cardgame, tcg]
- `query` (string, optional) — Keyword as typed into the shop's search box: card name in Japanese (or part of it), or the printed card number the shop puts in the name (136/106, OP05-119). The shop's own product code (型番, PN136106) is NOT searchable.
- `set_id` (string, optional) — Limit to one set (expansion): the set_id from the sets action, e.g. 7042 = 【SV2a】ポケモンカード151.
- `rarity` (string, optional) — Rarity as the shop labels it for that game (SAR, UR, SR, AR, シークレット, スーパー, ...). The list is per game and is returned as rarity_options.
- `in_stock_only` (boolean, optional, default false) — Only lots with stock (the shop's 在庫あり checkbox).
- `sort` (enum, optional, default "rarity_desc") — Order of the results. [one of: rarity_desc, rarity_asc, price_asc, price_desc, name_asc, name_desc]
- `feature` (enum, optional) — One of the shop's own listings. [one of: sale, damaged, new, recommended, price_down, collector]
- `page` (integer, optional, default 1) — Result page; 40 rows per page.

**Returns:** game, query, filters{}, results[]{product_id, offer_id (the lot: one product per condition), game, name, title (as printed, 【プレイ用】 prefix kept), condition (状態A | 状態C), play_grade, real_photo, rarity, model_number (shop code), card_number (from the name, e.g. 136/106; null when the name has none), image, url, price_jpy, stock, in_stock, sold_out}, count, total_results, page, page_size (40), total_pages, has_more, rarity_options[]{id, label}

**Example request body:**
```json
{
  "game": "pokemon-card",
  "query": "ピカチュウ"
}
```

### POST https://api.reefapi.com/dorasuta/v1/card — 3 credits
One product: every condition lot with its price and stock, set, rarity, product code, card number, description, image, and what Dorasuta pays for it (buy-back price per condition and the most it takes), from the sale and buy-back shops in one call.

**Parameters:**
- `product_id` (string, required) — The product id from a search row (product_id), or a dorasuta.jp / buy.dorasuta.jp product URL.
- `game` (enum, optional) — Card game (pokemon-card, yugioh-jp, ...). Optional when product_id is a dorasuta.jp URL; defaults to pokemon-card otherwise. [one of: pokemon-card, yugioh-jp, yugioh-rushduel, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, vanguard, digimon, disneylorcana, union-arena, hololive-official-cardgame, gundam-gcg, gundam-ab, dbs-cardgame-fw, dbsdv, battlespirits, shadowverse-evolve, wixoss, ultraman-cardgame, acgtcg, build-divide, mushijingi, xross-stars, conan-cardgame, haikyuvobacabreak, palworld-official-cardgame, llofficial-cardgame, ijinden, senkaisengi, horobeat-cardgame, tcg]
- `include_buyback` (boolean, optional, default true) — Also read the buy-back price (one more page). false = selling side only.

**Returns:** product_id, game, name, card_number, set{id, name, code}, rarity, model_number, description, image, url, offers[]{offer_id, condition (状態A | 状態C), price_jpy, stock, in_stock}, price_jpy (lowest in-stock price, else the lowest listed), stock (total), in_stock, availability (schema.org), buyback{available, offers[]{offer_id, condition, buyback_price_jpy, buy_limit}, url}, buyback_price_jpy (highest buy price; null when the shop does not buy this card)

**Example request body:**
```json
{
  "product_id": "570527",
  "game": "pokemon-card"
}
```

### POST https://api.reefapi.com/dorasuta/v1/buyback_search — 2 credits
What Dorasuta pays for cards (買取 prices) in one game: name, buy-back price in JPY, the most it takes per order, rarity, product code, card number. Filter by keyword, set or rarity; sort by buy price; 40 rows a page.

**Parameters:**
- `game` (enum, required) — Card game, as the shop's own path name (pokemon-card, yugioh-jp, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, ...). Short names such as pokemon, yugioh, onepiece, lorcana are accepted too. [one of: pokemon-card, yugioh-jp, yugioh-rushduel, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, vanguard, digimon, disneylorcana, union-arena, hololive-official-cardgame, gundam-gcg, gundam-ab, dbs-cardgame-fw, dbsdv, battlespirits, shadowverse-evolve, wixoss, ultraman-cardgame, acgtcg, build-divide, mushijingi, xross-stars, conan-cardgame, haikyuvobacabreak, palworld-official-cardgame, llofficial-cardgame, ijinden, senkaisengi, horobeat-cardgame, tcg]
- `query` (string, optional) — Keyword as typed into the shop's search box: card name in Japanese (or part of it), or the printed card number the shop puts in the name (136/106, OP05-119). The shop's own product code (型番, PN136106) is NOT searchable.
- `set_id` (string, optional) — Limit to one set (expansion): the set_id from the sets action, e.g. 7042 = 【SV2a】ポケモンカード151.
- `rarity` (string, optional) — Rarity as the shop labels it for that game (SAR, UR, SR, AR, シークレット, スーパー, ...). The list is per game and is returned as rarity_options.
- `sort` (enum, optional, default "standard") — Order of the results. [one of: standard, price_asc, price_desc]
- `page` (integer, optional, default 1) — Result page; 40 rows per page.

**Returns:** game, query, filters{}, results[]{product_id, offer_id (the lot: one product per condition), game, name, title (as printed, 【プレイ用】 prefix kept), condition (状態A | 状態C), play_grade, real_photo, rarity, model_number (shop code), card_number (from the name, e.g. 136/106; null when the name has none), image, url, buyback_price_jpy, buy_limit (the most the shop takes in one order)}}, count, total_results, page, page_size, total_pages, has_more, rarity_options[]

**Example request body:**
```json
{
  "game": "pokemon-card",
  "query": "ピカチュウ"
}
```

### POST https://api.reefapi.com/dorasuta/v1/buyback_card — 2 credits
Dorasuta's buy-back offer for one product: price per condition and the most it takes per order, with set, rarity and product code. available=false when the shop is not buying the card.

**Parameters:**
- `product_id` (string, required) — The product id from a search row (product_id), or a dorasuta.jp / buy.dorasuta.jp product URL.
- `game` (enum, optional) — Card game (pokemon-card, yugioh-jp, ...). Optional when product_id is a dorasuta.jp URL; defaults to pokemon-card otherwise. [one of: pokemon-card, yugioh-jp, yugioh-rushduel, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, vanguard, digimon, disneylorcana, union-arena, hololive-official-cardgame, gundam-gcg, gundam-ab, dbs-cardgame-fw, dbsdv, battlespirits, shadowverse-evolve, wixoss, ultraman-cardgame, acgtcg, build-divide, mushijingi, xross-stars, conan-cardgame, haikyuvobacabreak, palworld-official-cardgame, llofficial-cardgame, ijinden, senkaisengi, horobeat-cardgame, tcg]

**Returns:** product_id, game, name, card_number, set{}, rarity, model_number, image, url, available, offers[]{offer_id, condition, buyback_price_jpy, buy_limit}, buyback_price_jpy

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

### POST https://api.reefapi.com/dorasuta/v1/sets — 1 credit
Every set (expansion, starter deck, promo group) of one game as Dorasuta files them, with the set_id used by search and buyback_search, the set code (SV2a, OP09, ...) and the group (パック, 構築済みデッキ, プロモ, その他).

**Parameters:**
- `game` (enum, required) — Card game, as the shop's own path name (pokemon-card, yugioh-jp, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, ...). Short names such as pokemon, yugioh, onepiece, lorcana are accepted too. [one of: pokemon-card, yugioh-jp, yugioh-rushduel, onepiece-cardgame, mtg, duelmasters, weiss-schwarz, vanguard, digimon, disneylorcana, union-arena, hololive-official-cardgame, gundam-gcg, gundam-ab, dbs-cardgame-fw, dbsdv, battlespirits, shadowverse-evolve, wixoss, ultraman-cardgame, acgtcg, build-divide, mushijingi, xross-stars, conan-cardgame, haikyuvobacabreak, palworld-official-cardgame, llofficial-cardgame, ijinden, senkaisengi, horobeat-cardgame, tcg]
- `side` (enum, optional, default "sale") — Which shop's set list. [one of: sale, buyback]

**Returns:** game, side, sets[]{set_id, name, code, group, url}, count

**Example request body:**
```json
{
  "game": "pokemon-card"
}
```

### POST https://api.reefapi.com/dorasuta/v1/games — 1 credit
The card games Dorasuta sells (31, plus its sealed-product shop) and which of them it buys (buy-back shop), with the game value the other actions take.

**Parameters:** none

**Returns:** games[]{game, name, name_en, sale, buyback, sale_url, buyback_url}, count

## 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=dorasuta
- Human docs page: https://reefapi.com/docs/dorasuta
- Overview page: https://reefapi.com/dorasuta-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
