Card Labo API & Scraper
The Card Labo API returns カードラボ, a Japanese trading-card shop chain, as clean JSON in yen including tax, from both its online shop and its buy-back site.
🤖 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 finds single cards, graded slabs, sealed boxes and original packs by Japanese name or card number, by game (more than 40, from Pokémon, Yu-Gi-Oh! and ONE PIECE to Weiß Schwarz, Union Arena and Gundam), by any of the shop's 1,883 categories or its curated lists, with sold-out items included or left out and sorting by price. Every row carries the price, the stock count, whether it can be ordered, the rarity, the printed card number and the condition. card returns one product in full with the set and the shop's category path, the purchase limit, and what Card Labo pays to buy that exact card back. buyback_search and buyback_card read the buy-back side: the price paid and how many copies the shop still wants. categories lists the ids the filters take on both sites. No account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.
What Card Labo sells a card for, and what it pays for the same card
Card Labo runs a shop and a separate buy-back site. Prices for the identical card on both, measured 2026-11-08:
| card | shop: price_jpy / stock | buy-back: buyback_price_jpy / wanted |
|---|---|---|
| メガリザードンXex SAR, M2 110/080 | 79,800 / 0 (sold out) | 51,000 / 12 |
| リザードンex SAR, SV4A 349/190 | 27,800 / 4 | 22,000 / 8 |
| ライコウex SAR, M6 108/076 | 3,780 / 0 (sold out) | 3,000 / 8 |
| メガスターミーex SAR, M3 111/080 | 2,480 / 0 (sold out) | 1,500 / 8 |
| メガユキメノコex SAR, M2a 233/193 | 2,280 / 2 | 1,500 / 8 |
| メガゼラオラex SAR, M5 112/081 | 1,980 / 1 | 1,000 / 8 |
Prices are yen including consumption tax. The two sites keep separate catalogues, so a buy-back price is attached only when the title is the same on both; otherwise buyback.match says none and the buy-back rows with the same printed number are listed for you to compare, instead of a price that may be for a different printing.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/cardlabo/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"game": "pokemon",
"keyword": "リザードン",
"in_stock": true
}
}{
"ok": true,
"meta": {
"api": "cardlabo",
"endpoint": "search",
"mode": "live",
"latency_ms": 2790.1,
"record_count": 60,
"bytes": 1879726,
"cache_hit": false,
"total": 117,
"page": 1,
"per_page": 60,
"last_page": 2,
"has_more": true,
"sort": "default",
"filters_applied": {
"keyword": "リザードン",
"game": "pokemon",
"in_stock": true
},
"upstream_requests": 1,
"charged_credits": 2,
"version": "1.0.0",
"request_id": "afdb1e44ecd943b7",
"queue_ms": 2.5,
"fetched_at": "2026-11-08T13:04:19.266Z"
},
"data": {
"rows": [
{
"id": "94587",
"name": "【ポケカ】リザードンGX【-】SMH 013/131",
"game": "pokemon",
"card_name": "リザードンGX",
"card_number": "013/131",
"set": {
"id": null,
"name": null,
"code": "SMH"
},
"rarity": null,
"rarity_raw": "-",
"variant": null,
"product_type": "single",
"condition": "中古良品",
"is_preorder": false,
"is_play_grade": false,
"is_foil": false,
"graded": false,
"grader": null,
"grade": null,
"release_date": null,
"release_note": null,
"image": "https://www.c-labo-online.jp/data/c-labo/product/SMH_013.jpg",
"url": "https://www.c-labo-online.jp/product/94587",
"currency": "JPY",
"price_includes_tax": true,
"price_jpy": 5480,
"price_members_only": false,
"stock": 2,
"stock_unit": "枚",
"in_stock": true,
"availability": "in_stock",
"stock_text": "在庫数2枚"
},
{
"id": "100330",
"name": "【ポケカ】リザードン【R】SM9 013/095",
"game": "pokemon",
"card_name": "リザードン",
"card_number": "013/095",
"set": {
"id": null,
"name": null,
"code": "SM9"
},
"rarity": "R",
"rarity_raw": "R",
"variant": null,
"product_type": "single",
"condition": "中古良品",
"is_preorder": false,
"is_play_grade": false,
"is_foil": false,
"graded": false,
"grader": null,
"grade": null,
"release_date": null,
"release_note": null,
"image": "https://www.c-labo-online.jp/data/c-labo/product/SM9_013.jpg",
"url": "https://www.c-labo-online.jp/product/100330",
"currency": "JPY",
"price_includes_tax": true,
"price_jpy": 1980,
"price_members_only": false,
"stock": 4,
"stock_unit": "枚",
"in_stock": true,
"availability": "in_stock",
"stock_text": "在庫数4枚"
},
{
"id": "92100",
"name": "【ポケカ】リザードン【R】SM6A 003/053",
"game": "pokemon",
"card_name": "リザードン",
"card_number": "003/053",
"set": {
"id": null,
"name": null,
"code": "SM6A"
},
"rarity": "R",
"rarity_raw": "R",
"variant": null,
"product_type": "single",
"condition": "中古良品",
"is_preorder": false,
"is_play_grade": false,
"is_foil": false,
"graded": false,
"grader": null,
"grade": null,
"release_date": null,
"release_note": null,
"image": "https://www.c-labo-online.jp/data/c-labo/product/SM6A_003.jpg",
"url": "https://www.c-labo-online.jp/product/92100",
"currency": "JPY",
"price_includes_tax": true,
"price_jpy": 3280,
"price_members_only": false,
"stock": 2,
"stock_unit": "枚",
"in_stock": true,
"availability": "in_stock",
"stock_text": "在庫数2枚"
}
]
}
}What the Card Labo API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Card Labo's online shop by name or card number, game, category or curated list; only what is available, sorted by price. Each row carries the yen price, stock count and availability, and the card's rarity and number. | Pricing teams call search to search Card Labo's online shop by name or card number, game, category or curated list; only w…. | keyword, game, category_id, group_id, in_stock, ... |
| card | One Card Labo product in full: price, stock, purchase limit, the set and category it is filed under, its stated condition and images, plus what the shop pays to buy the same card back when the buy-back site lists it. | Marketplace operators call card to get one Card Labo product in full. | product_id, include_buyback |
| buyback_search | Card Labo's buy-back list (買取): what the shop pays for each card and how many it still wants, by name or card number, game, category or curated list, highest price first if you like. | Catalog enrichment teams call buyback_search to get card Labo's buy-back list (買取). | keyword, game, category_id, group_id, sort, ... |
| buyback_card | One buy-back product in full: the price Card Labo pays, how many it still wants, the set and category, the stated condition and the card image. | Retail analysts call buyback_card to get one buy-back product in full. | product_id |
| categories | Card Labo's whole category tree and curated lists on either site, with the ids `search` and `buyback_search` take. | Pricing teams call categories to get card Labo's whole category tree and curated lists on either site, with the ids `search` and `…. | side, game, parent_id, max_depth |
| games | The games the `game` filter accepts, with the top-level category ids of each on the shop and the buy-back site. | Marketplace operators call games to get the games the `game` filter accepts, with the top-level category ids of each on the shop and…. | none |
Call search from your stack
curl -X POST https://api.reefapi.com/cardlabo/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"game":"pokemon","keyword":"リザードン","in_stock":true}'import os
import requests
REEF_KEY = os.environ["REEF_KEY"]
r = requests.post(
"https://api.reefapi.com/cardlabo/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"game": "pokemon",
"keyword": "リザードン",
"in_stock": True
},
timeout=90,
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/cardlabo/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"game": "pokemon",
"keyword": "リザードン",
"in_stock": true
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.cardlabo.search with {"game":"pokemon","keyword":"リザードン","in_stock":true}.Who uses this API and why
- Japan-to-abroad arbitrage: Card Labo's yen price next to eBay, TCGplayer or Cardmarket for the same card number
- Buy-back spread: what the chain pays against what it sells the same card for
- Restock alerts: sold-out singles flipping to a stock count
- Sealed release tracking: pre-order prices and release dates across 40+ games
- Coverage of smaller Japanese games that large price guides do not carry
Questions developers ask before integrating
Which games does Card Labo cover?
More than 40, including Pokémon, Yu-Gi-Oh! OCG and Rush Duel, ONE PIECE, Weiß Schwarz (with Rose and Blau), Magic: The Gathering, Duel Masters, Vanguard, Battle Spirits, Union Arena, Dragon Ball Fusion World, hololive, Gundam, Lorcana and Love Live!. games lists them all, and categories lists the shop's 1,883 categories (736 on the buy-back site) for anything more specific.
Does it give the buy-back (買取) price?
Yes. buyback_search and buyback_card return what Card Labo pays and buyback_wanted_qty, how many copies it still wants, and card attaches the buy-back price when the same title is listed on the buy-back site. A bulk lot has no per-card price, so its price is null and its status is bulk. The shop's own notice says online buy-back is reopening one game at a time; prices stay published for the others.
Why is price_jpy null on some products?
Card Labo shows 会員販売価格 instead of a number on some new releases, because the price is for logged-in members. Search rows return price_jpy null with price_members_only true. card returns the member price the product carries in member_price_jpy, when it is there. In our census of 3,827 rows, 15 were like this.
What does condition mean?
Card Labo's own rule is that a single with no marking in its title is 中古良品 (used, good). Damaged copies say so in the title, as プレイ用, キズあり or 特価品, and graded slabs carry their grade. condition reports that marking, and is_play_grade flags the damaged copies. The shop also warns that when name and rarity match, a copy's printed number or set can differ from the photo.
How do I find a card by its number?
Put the printed number in keyword, such as IMPH-JP018, M2 110/080 or OP01-001. Include the set code for Pokémon numbers, since a bare 110/080 also matches other games' numbers that contain those digits. Each row's card_number gives the exact printed number so you can keep only the ones you want, and + and ++ marks are kept because Card Labo uses them to separate printings.
Can I search in English?
No. Card Labo's titles are Japanese, so search by the Japanese or kana name (リザードン or りざーどん) or by card number. An English name such as charizard finds nothing, and the API returns that as not found at no charge.
Can I sort by best sellers or filter by price?
Sorting is by price, high or low, or the shop's own order; those are the sorts that actually change the results on Card Labo. There is no price-range filter on the shop, so none is offered: read the sorted pages and stop at your limit.
Are pre-orders included?
Yes. A row with is_preorder true shows the release date when the title states it, and availability accepting_orders means the shop is taking orders now; its stock is null because Card Labo shows no count. in_stock follows the shop's own availability filter, so open pre-orders count as available.
What is the Card Labo API?
Card Labo API is a ReefAPI endpoint group for card labo (カードラボ) as json: japanese trading-card prices and stock across 40+ games, sealed product and pcg slabs, plus the chain's buy-back prices, in jpy. It returns live JSON through POST requests under /cardlabo/v1.
Is the Card Labo API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Card Labo calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Card Labo login or account?
No login to Card Labo 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 Card Labo 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 Card Labo API use?
Card Labo actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Card Labo from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call cardlabo actions with the same key, credit pool and JSON envelope used by normal REST requests.