# Yuyu-tei API — Japanese trading-card prices from 遊々亭 (yuyu-tei.jp): what the shop sells a card for (JPY, stock, sale price, damaged copies) and what it buys it for (買取 price, with the earlier price when it was raised), for 24 games incl. Pokémon, Yu-Gi-Oh!, One Piece, Duel Masters, Weiß Schwarz, Vanguard, Digimon, Union Arena, Gundam; plus each game's set list. No login, no key.

> Search what yuyu-tei SELLS in one game. Each row is one product (one card printing; damaged copies are their own products) with its price, stock, rarity, set and card number. Give query, set, rarity or card_type. Up to 600 rows a page.
> ReefAPI engine `yuyu-tei` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/yuyu-tei/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/yuyu-tei/v1/search — 3 credits
Search what yuyu-tei SELLS in one game. Each row is one product (one card printing; damaged copies are their own products) with its price, stock, rarity, set and card number. Give query, set, rarity or card_type. Up to 600 rows a page.

**Parameters:**
- `game` (enum, optional, default "pokemon") — Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon. [one of: pokemon, yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen]
- `query` (string, optional) — Card name, partial match, as the shop writes it (Japanese; e.g. 'ピカチュウ', 'ルフィ', 'ex'). Give query, set, rarity or card_type (any combination).
- `set` (string, optional) — One set code, or several separated by commas (up to 20), as the `sets` action and every row's `set_code` give them (e.g. sv08a = [SV8a] テラスタルフェスex). An unknown code answers INVALID_PARAM.
- `rarity` (string, optional) — One rarity exactly as the shop lists it for that game (Pokémon: UR, SAR, SR, AR, RR, R, U, C, PROMO …; Yu-Gi-Oh!: SE, UR, QCSE …). An unknown value answers INVALID_PARAM with the game's list.
- `card_type` (string, optional) — The shop's card-type / colour filter for that game (Pokémon: ポケモン, エネルギー, トレーナーズ; One Piece: colours 赤, 緑 …). An unknown value answers INVALID_PARAM with the game's list. Not available together with damaged=true.
- `damaged` (boolean, optional, default false) — List the shop's damaged copies (傷有り) instead of clean ones. Damaged copies are separate products with their own (lower) price and stock.
- `on_sale_only` (boolean, optional, default false) — Only products on sale (特価品). Not available together with damaged=true.
- `in_stock_only` (boolean, optional, default false) — Only products in stock (在庫有のみ).
- `page` (integer, optional, default 1) — Page number. The shop pages lists by 600 products; meta.last_page says how many pages there are. A page past the last one answers no rows and past_last_page=true.

**Returns:** rows[]: product_id (give it to `card`), card_id (<set code>/<card id>: the same card on the sell and buy side), game, set_code, card_number (as printed on the card), rarity (null when the shop writes '-'), rarity_raw, name (the shop's name; variant notes such as (パラレル) stay in it), url, image, price_jpy, on_sale, regular_price_jpy (the struck-through price on sale items), damaged, in_stock, stock_qty (exact web-shop stock; 0 when sold out), stock_display (what the page prints: 'N 点' up to 10, '◯' = 11 or more, '×' = sold out). meta: page, last_page, has_more, past_last_page, total (exact on the last page only), total_is_exact, page_size (600), filters_applied, rarities_on_page, warnings

**Example request body:**
```json
{
  "query": "ピカチュウ",
  "rarity": "SAR"
}
```

### POST https://api.reefapi.com/yuyu-tei/v1/card — 3 credits
One product yuyu-tei sells, in full: price, stock, set name, the card's attribute table (type, HP, colour, effect text … as the shop prints it) and the large image.

**Parameters:**
- `product_id` (string, required) — A list row's `product_id` (<set code>/<card id>, ending in /damage for a damaged copy), or a yuyu-tei card URL such as https://yuyu-tei.jp/sell/poc/card/sv08a/10481.
- `game` (enum, optional, default "pokemon") — Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon. [one of: pokemon, yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen]

**Returns:** card{product_id (give it to `card`), card_id (<set code>/<card id>: the same card on the sell and buy side), game, set_code, card_number (as printed on the card), rarity (null when the shop writes '-'), rarity_raw, name (the shop's name; variant notes such as (パラレル) stay in it), url, image, price_jpy, on_sale, regular_price_jpy (the struck-through price on sale items), damaged, in_stock, stock_qty (exact web-shop stock; 0 when sold out), stock_display (what the page prints: 'N 点' up to 10, '◯' = 11 or more, '×' = sold out), set_name, name_reading (the kana reading the page adds, when it does), attributes{label: value}, availability (the page's schema.org value), price_mismatch (printed price vs the page's own schema.org price)}

**Example request body:**
```json
{
  "product_id": "sv08a/10481"
}
```

### POST https://api.reefapi.com/yuyu-tei/v1/buy_prices — 3 credits
yuyu-tei's buying-price list (買取): what the shop PAYS for a card, in JPY — never the sale price. Same filters and ids as `search`; the row's card_id is the same card on the sell side.

**Parameters:**
- `game` (enum, optional, default "pokemon") — Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon. [one of: pokemon, yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen]
- `query` (string, optional) — Card name, partial match, as the shop writes it (Japanese; e.g. 'ピカチュウ', 'ルフィ', 'ex'). Give query, set, rarity or card_type (any combination).
- `set` (string, optional) — One set code, or several separated by commas (up to 20), as the `sets` action and every row's `set_code` give them (e.g. sv08a = [SV8a] テラスタルフェスex). An unknown code answers INVALID_PARAM.
- `rarity` (string, optional) — One rarity exactly as the shop lists it for that game (Pokémon: UR, SAR, SR, AR, RR, R, U, C, PROMO …; Yu-Gi-Oh!: SE, UR, QCSE …). An unknown value answers INVALID_PARAM with the game's list.
- `card_type` (string, optional) — The shop's card-type / colour filter for that game (Pokémon: ポケモン, エネルギー, トレーナーズ; One Piece: colours 赤, 緑 …). An unknown value answers INVALID_PARAM with the game's list. Not available together with damaged=true.
- `page` (integer, optional, default 1) — Page number. The shop pages lists by 600 products; meta.last_page says how many pages there are. A page past the last one answers no rows and past_last_page=true.

**Returns:** rows[]: product_id (give it to `card`), card_id (<set code>/<card id>: the same card on the sell and buy side), game, set_code, card_number (as printed on the card), rarity (null when the shop writes '-'), rarity_raw, name (the shop's name; variant notes such as (パラレル) stay in it), url, image, buy_price_jpy (what the shop PAYS), price_up (the shop flags it PRICE UP), previous_buy_price_jpy (the struck-through earlier buy price on PRICE UP rows). meta: page, last_page, has_more, past_last_page, total (exact on the last page only), total_is_exact, page_size (600), filters_applied, rarities_on_page, warnings

**Example request body:**
```json
{
  "query": "ピカチュウ",
  "rarity": "SAR"
}
```

### POST https://api.reefapi.com/yuyu-tei/v1/buy_card — 3 credits
One card's buying price (買取) in full: buy price, PRICE UP flag with the earlier price, set name and the card's attribute table.

**Parameters:**
- `product_id` (string, required) — A row's `card_id` / `product_id` (<set code>/<card id>), or a yuyu-tei buy URL such as https://yuyu-tei.jp/buy/poc/card/sv08a/10481. The sell and buy sides share the id.
- `game` (enum, optional, default "pokemon") — Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon. [one of: pokemon, yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen]

**Returns:** card{product_id (give it to `card`), card_id (<set code>/<card id>: the same card on the sell and buy side), game, set_code, card_number (as printed on the card), rarity (null when the shop writes '-'), rarity_raw, name (the shop's name; variant notes such as (パラレル) stay in it), url, image, buy_price_jpy (what the shop PAYS), price_up (the shop flags it PRICE UP), previous_buy_price_jpy (the struck-through earlier buy price on PRICE UP rows), set_name, name_reading, attributes{label: value}}

**Example request body:**
```json
{
  "product_id": "sv08a/10481"
}
```

### POST https://api.reefapi.com/yuyu-tei/v1/sets — 3 credits
The set list (収録弾) for one game, in the shop's own order, with the codes `search` and `buy_prices` take as `set`.

**Parameters:**
- `game` (enum, optional, default "pokemon") — Which game: pokemon (default), yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen. The site's own path code (poc, ygo, opc, ws, …) is accepted too; note `pm` is Precious Memories, not Pokémon. [one of: pokemon, yugioh, yugioh_rush_duel, onepiece, duel_masters, weiss_schwarz, weiss_schwarz_rose, vanguard, digimon, union_arena, battle_spirits, gundam, hololive, shadowverse_evolve, wixoss, zx, precious_memories, chaos, rebirth, lycee, fire_emblem_cipher, xross_stars, gundam_arsenal_base, eiketsu_taisen]

**Returns:** rows[]: set_code, name (the shop's label, e.g. '[SV8a] ハイクラスパック テラスタルフェスex'), printed_code (the bracketed code on the label, when there is one). meta: rarities, card_types (the game's own filter values)

**Example request body:**
```json
{
  "game": "onepiece"
}
```

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