Dorasuta API & Scraper: parameters and responses
This is the reference for the 6 Dorasuta endpoints under /dorasuta/v1 (search, card, buyback_search, buyback_card, sets and games) and their 11 parameters. Each endpoint lists its parameters, required or optional, with allowed values and defaults, and comes with a cURL, Python and JavaScript call; every response uses the same { ok, data, meta, error } envelope.
The Dorasuta API returns ドラゴンスター (Dragon Star), a Japanese trading-card chain with stores in Osaka and Tokyo, as clean JSON in yen.
🤖 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 lists what the shop sells in one game - by card name, by the printed card number (136/106, OP05-119), by set, by rarity, in stock only, or one of the shop's own lists (sale, damaged-copy bargains, new releases, price reduced, collector) - sorted by rarity, price or name, 40 rows a page. Each row is one copy grade of one card: 状態A or the cheaper 状態C play grade, the price, the exact stock, the rarity, the card number, the shop's product code, a real-photo flag and the image. card returns one card with every condition and its stock, the set, rarity and description, and in the same call what Dorasuta pays for it. buyback_search and buyback_card are the other side of the counter: the 買取 price per condition and the most the shop takes in one order. sets lists every set of a game with the set code, and games lists the 31 games and which ones the shop buys. Games include Pokémon, One Piece, Yu-Gi-Oh! (OCG and Rush Duel), Duel Masters, Magic: The Gathering, Weiß Schwarz, Digimon, Disney Lorcana, Union Arena, Gundam, hololive and Vanguard. One ReefAPI key, the standard { ok, data, meta, error } envelope, no Dorasuta account.
One card, two prices, two grades
Dorasuta sells most popular singles in two grades and buys them back at a published price. On 2026-11-08 the Pokémon card ピカチュウex (136/106 UR) looked like this; the API returns all four numbers from one card call.
| What the shop shows | field | value |
|---|---|---|
| 状態A 20,000 円 · 在庫数 3 | offers[].condition, price_jpy, stock | "状態A", 20000, 3 |
| 【プレイ用】 14,000 円 (状態C) · 在庫数 3 | offers[].condition, price_jpy, stock | "状態C", 14000, 3 |
| 買取 10,000 円, up to 10 per order | buyback.offers[].buyback_price_jpy, buy_limit | 10000, 10 |
| ピカチュウex(136/106 UR) · 【SV8】超電ブレイカー | card_number, set.code | "136/106", "SV8" |
| SOLDOUT badge | stock, in_stock | 0, false (price kept) |
In the final live run 129 of 567 sale rows were the 状態C play grade and 183 were sold out with their last price kept. The shop's product code (PN136106) is returned as model_number but is not searchable; search by name or by the number printed on the card.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/dorasuta/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"game": "pokemon-card",
"query": "ピカチュウ",
"sort": "price_desc"
}
}{
"ok": true,
"meta": {
"api": "dorasuta",
"endpoint": "search",
"mode": "live",
"latency_ms": 3548.4,
"record_count": 40,
"bytes": 129313,
"cache_hit": false,
"pagination": {
"page": 1,
"has_more": true,
"page_size": 40,
"total": 390
},
"upstream_calls": 1,
"clearance_age_s": 1234.4,
"charged_credits": 2,
"version": "0.1.0",
"request_id": "1f429227d468428b",
"queue_ms": 1.2,
"fetched_at": "2026-11-08T13:04:23.920Z"
},
"data": {
"game": "pokemon-card",
"query": "ピカチュウ",
"filters": {
"sort": "price_desc"
},
"results": [
{
"product_id": "723336",
"offer_id": null,
"game": "pokemon-card",
"name": "【未開封・キズ有】ポンチョを着たピカチュウ(230/XY-P)(231/XY-P)",
"title": "【未開封・キズ有】ポンチョを着たピカチュウ(230/XY-P)(231/XY-P)",
"condition": "状態A",
"play_grade": false,
"real_photo": true,
"rarity": "プロモ",
"model_number": "pnpon",
"card_number": "231/XY-P",
"sold_out": true,
"image": "https://dorasuta.jp/contents/product/0/11_0000723336_0_0_emuPyc.jpg",
"url": "https://dorasuta.jp/pokemon-card/product?pid=723336",
"price_jpy": 2800000,
"stock": 0,
"in_stock": false
},
{
"product_id": "294368",
"offer_id": null,
"game": "pokemon-card",
"name": "日本代表のピカチュウ(050/XY-P)",
"title": "日本代表のピカチュウ(050/XY-P)",
"condition": "状態A",
"play_grade": false,
"real_photo": false,
"rarity": "プロモ",
"model_number": "PN050XYP",
"card_number": "050/XY-P",
"sold_out": true,
"image": "https://dorasuta.jp/contents/product/0/11_0000294368_0_0_gv107f.jpg",
"url": "https://dorasuta.jp/pokemon-card/product?pid=294368",
"price_jpy": 450000,
"stock": 0,
"in_stock": false
},
{
"product_id": "275654",
"offer_id": null,
"game": "pokemon-card",
"name": "ピカチュウ(175/XY-P)",
"title": "ピカチュウ(175/XY-P)",
"condition": "状態A",
"play_grade": false,
"real_photo": false,
"rarity": "プロモ",
"model_number": "PN175XYP",
"card_number": "175/XY-P",
"sold_out": true,
"image": "https://dorasuta.jp/contents/product/0/11_0000275654_0_0_LYFz42.jpg",
"url": "https://dorasuta.jp/pokemon-card/product?pid=275654",
"price_jpy": 450000,
"stock": 0,
"in_stock": false
}
],
"count": 40,
"total_results": 390,
"page": 1,
"page_size": 40,
"total_pages": 10,
"has_more": true,
"rarity_options": [
{
"id": "27707",
"label": "RGB"
},
{
"id": "27692",
"label": "FUR"
},
{
"id": "26971",
"label": "MUR"
}
]
}
}What the Dorasuta API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | 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. | Pricing teams call search to get cards and products for sale at Dorasuta in one game. | game, query, set_id, rarity, in_stock_only, ... |
| card | 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. | Marketplace operators call card to get one product. | product_id, game, include_buyback |
| buyback_search | 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. | Catalog enrichment teams call buyback_search to get what Dorasuta pays for cards (買取 prices) in one game. | game, query, set_id, rarity, sort, ... |
| buyback_card | 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. | Retail analysts call buyback_card to get dorasuta's buy-back offer for one product. | product_id, game |
| sets | 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 (パック, 構築済みデッキ, プロモ, その他). | Pricing teams call sets to get every set (expansion, starter deck, promo group) of one game as Dorasuta files them, with the…. | game, side |
| games | 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. | Marketplace operators call games to get the card games Dorasuta sells (31, plus its sealed-product shop) and which of them it buys (b…. | none |
Call search from your stack
curl -X POST https://api.reefapi.com/dorasuta/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"game":"pokemon-card","query":"ピカチュウ","sort":"price_desc"}'import os
import requests
REEF_KEY = os.environ["REEF_KEY"]
r = requests.post(
"https://api.reefapi.com/dorasuta/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"game": "pokemon-card",
"query": "ピカチュウ",
"sort": "price_desc"
},
timeout=90,
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/dorasuta/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"game": "pokemon-card",
"query": "ピカチュウ",
"sort": "price_desc"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.dorasuta.search with {"game":"pokemon-card","query":"ピカチュウ","sort":"price_desc"}.Who uses this API and why
- Buy-sell spread tracking: Dorasuta's selling price next to its 買取 price for the same card
- Japan price feeds for Pokémon and One Piece singles, per condition, with stock
- Arbitrage between Japanese shops (Dorasuta, Card Rush, Yuyu-tei, Suruga-ya) on the same card number
- Set checklists with live prices: every card of a set, sorted by price
Questions developers ask before integrating
What is the difference between 状態A and 状態C?
They are Dorasuta's own grades for used singles. 状態A may have light wear such as small scratches or print marks; 状態C has clear wear and is sold cheaper as a play copy (the shop marks those rows 【プレイ用】). Every search row is one grade of one card, so the same card can appear twice with two prices; product_id groups them and offer_id is the grade.
Can I get the buy price (買取) and the selling price together?
Yes. card returns the selling price and stock per grade and, in the same call, the buy-back offer: buyback_price_jpy per grade and the most the shop takes per order. buyback_card returns only the buy side. When Dorasuta is not buying a card, buyback.available is false rather than an error.
How do I find a card by its card number?
Pass the number as printed in the query: 136/106 for Pokémon or OP05-119 for One Piece. The live run found the 2 grades of ピカチュウex 136/106 and 15 One Piece rows for OP05-119. Each row returns card_number when the shop prints it in the name (Weiß Schwarz codes such as PJS/S109-039 too); Yu-Gi-Oh! and MTG names carry none, so it is null there.
Does it show stock per store?
No. Dorasuta publishes one online stock count per grade, not the stock of its physical stores, so the API returns that count and nothing per store.
Which games are covered?
All 31 that Dorasuta sells online, including Pokémon, One Piece, Yu-Gi-Oh! OCG and Rush Duel, Duel Masters, Magic: The Gathering, Weiß Schwarz, Digimon, Disney Lorcana, Union Arena, Gundam, hololive, Vanguard and Shadowverse EVOLVE. The buy-back shop covers 30 of them. The games action lists them with the value the other actions take.
What is the Dorasuta API?
Dorasuta API is a ReefAPI endpoint group for ドラゴンスター (dorasuta.jp) card prices as json: selling price per condition with stock, and what the shop pays (買取), for 31 games. It returns live JSON through POST requests under /dorasuta/v1.
Is the Dorasuta API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Dorasuta calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Dorasuta login or account?
No login to Dorasuta 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 Dorasuta 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 Dorasuta API use?
Dorasuta actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Dorasuta from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call dorasuta actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Dorasuta API a Dorasuta scraper?
It is the managed alternative to a DIY Dorasuta 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 ドラゴンスター (dorasuta.jp) card prices as json: selling price per condition with stock, and what the shop pays (買取), for 31 games back as clean JSON.
Why does my Dorasuta scraper keep getting blocked?
Most Dorasuta scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.