Yu-Gi-Oh! Price API: TCGplayer & Cardmarket in One Call
Yu-Gi-Oh! price API with TCGplayer USD and Cardmarket EUR prices in one call. 709 sets, free catalog, set prices and analytics on Ultra. One key, 12 games.

🔵 IN THIS GUIDE: How to pull Yu-Gi-Oh! card data and both marketplace prices (TCGplayer in USD, Cardmarket in EUR) from one REST API. The catalog is free, and whole-set prices and analytics start at Ultra. Every example below comes from a real API response captured on November 7, 2026.
Quick Answer: The PokéWallet API returns TCGplayer (USD) and Cardmarket (EUR) prices for a Yu-Gi-Oh! card in a single response, under
/ygo/, with the same key you use for the other 11 games. The catalog (709 sets as of November 7, 2026, plus cards, search and images) is free at 100 requests/hour. Prices for whole sets and the analytics endpoints need Ultra (€29/month) or the 7-day trial; Pro is not enough. Prices refresh once a day.
Yu-Gi-Oh! prices are split by more than marketplace. The same card can exist as a 1st Edition and an Unlimited print, in several rarities across several sets, and as an Extended Art that costs fifty times the regular one. US players watch TCGplayer, European players watch Cardmarket, and a price tracker that only reads one of them gives half the picture.
This guide covers what the ygo endpoints return, how to make a first request, what stays free, what needs Ultra, and how to call it from JavaScript and Python. It also covers where YGOPRODeck is the simpler choice. It is the fourth game guide in the series, after Riftbound, Disney Lorcana and Magic: The Gathering.
The argument isn't "better than the alternatives". It's one key and one response shape across twelve games, with two marketplaces side by side. The multi-game overview covers that bigger picture, and the games page lists all twelve. The full reference is in the Yu-Gi-Oh! API documentation.
Key Takeaways
- 🆓 The catalog is free on every plan.
/ygo/sets,/ygo/sets/:set,/ygo/cards/:id,/ygo/searchand/ygo/images/:idcost nothing beyond the free tier's 100 requests/hour and 1,000/day. - 💰 A single card or search call already includes prices. Both return TCGplayer and Cardmarket prices on every plan. The set card list (
/ygo/sets/:set) does not. - 🔐 Whole-set prices and analytics need Ultra.
/ygo/prices/:set, statistics, completion value, trending sets and top cards require Ultra (€29/month) or the 7-day trial. Pro does not unlock them for Yu-Gi-Oh!. - 📚 Editions and versions are split for you. TCGplayer prices come per edition (
1st Edition,Unlimited), and each print version (regular, Extended Art, Grand Master Rare) is its own card with its own ID. - 🌍 Two currencies, never converted. TCGplayer is USD, Cardmarket is EUR, and the completion-value response says cross-currency comparison isn't available.
- 🗓️ New sets appear before release. Magnificent Maestros (
MAMS, out November 13, 2026) is already in/ygo/setswith its sealed products; the card list fills in once the cards are listed.
What the API Covers
Yu-Gi-Oh! sits under the game code ygo. The public GET /games endpoint lists it with its routes:
| Route | What it does | Plan |
|---|---|---|
/ygo/sets | List every set | Free |
/ygo/sets/:set | One set and its cards | Free |
/ygo/cards/:id | One card with TCGplayer and Cardmarket prices | Free |
/ygo/search?q= | Search cards, prices included | Free |
/ygo/images/:id | Card image | Free |
/ygo/prices/:set | Prices for a whole set | Ultra |
/ygo/sets/:set/statistics | Price statistics and rarity breakdown | Ultra |
/ygo/sets/:set/completion-value | Cost to complete a set | Ultra |
/ygo/sets/trending | Sets moving over 7 days | Ultra |
/ygo/analytics/top-cards | Top cards by price or growth | Ultra |
The /games response files the last five under pro_endpoints. For the ten games beyond Pokémon and One Piece, those need Ultra or the 7-day trial, and Pro does not cover them.
The set list reported 709 sets on November 7, 2026. Each entry has a set_code, a set_id, a card_count, a sealed_count, a language and a release date. Three real entries show the range:
| Set | set_code | set_id | Cards | Sealed | Release |
|---|---|---|---|---|---|
| Magnificent Monsters | MAMO | 24707 | 228 | 3 | 2026-09-04 |
| Beyond the Brave | BETB | 24815 | 136 | 3 | 2026-10-09 |
| Magnificent Maestros | MAMS | 24808 | 0 | 3 | 2026-11-13 |
| 2-Player Starter Deck Yuya & Declan | ys15 | -70 | 42 | 0 | null |
Upcoming sets show up with their sealed products first (Magnificent Maestros has its booster pack, box and display), and a release date can be null. Negative set_id values are sets that exist on Cardmarket only. The catalog also includes Japanese sets, marked by their language, so filter on it if you only want English prints.
Cards carry Yu-Gi-Oh!-specific fields on top of the common ones: attribute, attack, defense, monster_type, link_rating, link_arrows and upc. attack and defense arrive as strings ("2500", "2100"), so convert them before you sort.
Your First Request
Every request goes to https://api.pokewallet.io with your key in the X-API-Key header. Start with a search:
curl -H "X-API-Key: $POKEWALLET_API_KEY" \
"https://api.pokewallet.io/ygo/search?q=Pharaoh's%20Servant"
The query returned 20 matches. The metadata block tells you where the prices came from:
| Metadata field | Value |
|---|---|
total_count | 20 |
tcg (cards with TCGplayer data) | 15 |
cardmarket (cards with Cardmarket data) | 12 |
both_sources | 7 |
tcg_only | 8 |
cardmarket_only | 5 |
Not every card exists on both marketplaces, so handle a missing side. Japanese prints in the results, for example, carry only Cardmarket prices. Broad queries are capped: a search for "Magician" reported 300 results with truncated: true, so narrow the query rather than paging through everything.
Free Endpoints
Sets and cards
GET /ygo/sets/24707 returns Magnificent Monsters (MAMO), released September 4, 2026. It accepts either the set_id or the set_code. If a set_code is ambiguous, the API answers with candidates, so prefer the numeric set_id in code you ship.
The card list is paginated, with total and total_pages in the pagination object. Its first card is Dark Magician, the Pharaoh's Servant (MAMO-EN001, Ultra Rare, 1st Edition). In the set list the price arrays are empty:
"tcgplayer": { "prices": [], "url": "https://www.tcgplayer.com/product/714701/yugioh-magnificent-monsters-dark-magician-the-pharaohs-servant" }
That is by design: the set card list gives you the card and the marketplace links, not the prices. To get prices, call the single-card endpoint or search, or use the Ultra set-price endpoint below.
One card, both marketplaces
GET /ygo/cards/:id takes the long ID from the set or search results. Here are two versions of the same card from Magnificent Monsters, each with its own ID:
| Version | TCGplayer market (USD) | TCGplayer low / high | Cardmarket trend (EUR) | Cardmarket avg 30d |
|---|---|---|---|---|
| Dark Magician, the Pharaoh's Servant (Ultra Rare) | $2.77 | $1.45 / $40.00 | €2.12 | €2.42 |
| Dark Magician, the Pharaoh's Servant (Extended Art) | $127.19 | $121.18 / $420.00 | €133.54 | €121.15 |
TCGplayer, 1st Edition; Cardmarket, normal. Both updated November 7, 2026.
The Extended Art costs about 46 times the regular print on TCGplayer, which is why versions must stay separate in your data. On Cardmarket they are separate products too: the response names them "V.1 - Ultra Rare" and "V.2 - Ultra Rare" in product_name, and each carries low, trend, avg, avg1, avg7 and avg30. TCGplayer prices come per edition in sub_type_name; older cards like Pharaoh's Servant (AST) return both 1st Edition ($1.76) and Unlimited ($1.04).
updated_at marks the last time a price changed, not the time of your request. A Cardmarket foil entry that hasn't moved in weeks will keep an older stamp than the normal one next to it.
Plan your request budget before you loop. The free tier is 100 requests/hour and 1,000/day, and every call counts, including the card lookups you make after a search.
Ultra Endpoints: Set-Wide Prices & Analytics
Ultra costs €29/month, with 7,000 requests/hour and 70,000/day. The trial lasts 7 days and you start it from the dashboard after you log in. The whole Yu-Gi-Oh! analytics layer sits behind it. See Pro vs Ultra for the plan breakdown.
Prices for a whole set
GET /ygo/prices/24707 returns one row per card version and edition, with source: "both" and a total of 234 rows for Magnificent Monsters. Each row has the TCGplayer and Cardmarket figures side by side:
{
"card_number": "MAMO-EN001",
"name": "Dark Magician, the Pharaoh's Servant (Extended Art)",
"variant": "1st Edition",
"tcgplayer": { "market_price": 149.33, "low_price": 137.99 },
"cardmarket": { "trend": 101.9, "avg": 120.19, "avg30": 130.47 }
}
Trimmed from the response fetched for this guide; the full row also carries mid and high prices, the other Cardmarket averages and updated_at. The single-card call above is more recent.
Statistics
GET /ygo/sets/24707/statistics summarises the set on each marketplace:
| TCGplayer (USD) | Cardmarket (EUR) | |
|---|---|---|
| Average price | 66.09 (avg_market_price) | 252.54 |
| Minimum | 0.10 | 0.11 |
| Maximum | 5,000 | 15,000 |
| Most expensive | Winged Kuriboh Sabatiel LV10 (GMR) | Dark Magician, the Pharaoh's Servant (GMR) |
The rarity breakdown splits the set into 138 Ultra Rare, 46 Starlight Rare, 26 Secret Rare and 18 Grand Master Rare cards. The Grand Master Rares pull the averages far above what a typical card costs, so use the median of the set-price rows if you want a "normal" card price. Thin markets also produce round, listing-like figures at the top, like the €15,000 here: check how many sales sit behind a number before you display it as a value.
Completion value
GET /ygo/sets/24707/completion-value estimates what one copy of every card costs:
| Low | Market / avg | High / trend | |
|---|---|---|---|
| TCGplayer (USD) | 189,772.10 | 171,007.03 (market) | 375,141.96 (high) |
| Cardmarket (EUR) | 118,951.11 | 101,620.96 (avg) | 37,853.28 (trend) |
Almost all of that is the Grand Master Rare slot: the response's breakdown by rarity shows how each rarity contributes. The note in the response is explicit that this is one copy per card in the base finish and that USD and EUR can't be compared directly. Use one field consistently: the Cardmarket trend estimate sits far below its average estimate.
Top cards and trending sets
GET /ygo/analytics/top-cards defaults to the highest prices from TCGplayer:
| Card | Set | Price |
|---|---|---|
| Winged Kuriboh Sabatiel LV10 (GMR) | Magnificent Monsters (MAMO) | 5,000 |
| Black Rose Dragon (Ghost Rare) | Crossroads of Chaos (CSOC) | 1,499.09 |
Add ?metric=growth&source=cm to rank by Cardmarket growth instead. The sample returned Jerry Beans Man (Dark Revelation Volume 4, €134.11, +433.9% over 7 days) and Worm Bait (+402.1%, €9.69). Growth lists surface low-supply commons and promos, so check the sale volume behind a spike before acting on it.
GET /ygo/sets/trending covers a 7-day window. World Championship 2011 Card Pack showed +119.9% on Cardmarket (average €43.90 to €96.57), and Starter Deck: Kaiba showed +74.4% (€6.08 to €10.61), led by a Blue-Eyes White Dragon print up 165.7%. TCGplayer returned work_in_progress with the message "TCGPlayer price history not yet available". Code defensively: the tcgplayer key can be null or a status object.
Code Examples: JavaScript & Python
Both examples use only the routes, parameters and fields shown above. Set your key as POKEWALLET_API_KEY.
JavaScript (Node 18+): search, then compare marketplaces
const BASE = "https://api.pokewallet.io";
const headers = { "X-API-Key": process.env.POKEWALLET_API_KEY };
async function get(path) {
const res = await fetch(`${BASE}${path}`, { headers });
if (!res.ok) {
throw new Error(`${path} failed: HTTP ${res.status}`);
}
return res.json();
}
const q = encodeURIComponent("Pharaoh's Servant");
const { results } = await get(`/ygo/search?q=${q}`);
for (const card of results) {
const { name, set_code, rarity } = card.card_info;
const tcg = (card.tcgplayer?.prices ?? []).map(
(p) => `${p.sub_type_name} $${p.market_price}`
);
const cm = (card.cardmarket?.prices ?? [])
.filter((p) => p.trend !== null)
.map((p) => `${p.variant_type} €${p.trend}`);
console.log(`${name} (${set_code}, ${rarity ?? "no rarity"})`);
console.log(" TCGplayer market:", tcg.join(", ") || "no data");
console.log(" Cardmarket trend:", cm.join(", ") || "no data");
}
The optional chaining covers the cards that exist on only one marketplace, and rarity can be null on promos.
Python: Ultra set prices, most expensive first
import os
import requests
BASE = "https://api.pokewallet.io"
HEADERS = {"X-API-Key": os.environ["POKEWALLET_API_KEY"]}
def get(path: str) -> dict:
res = requests.get(f"{BASE}{path}", headers=HEADERS, timeout=30)
res.raise_for_status()
return res.json()
payload = get("/ygo/prices/24707") # Ultra or trial required
rows = [
{
"number": row["card_number"],
"name": row["name"],
"edition": row["variant"],
"usd": row["tcgplayer"]["market_price"],
"eur_trend": row["cardmarket"]["trend"],
}
for row in payload["data"]
if row.get("tcgplayer") and row.get("cardmarket")
]
for row in sorted(rows, key=lambda r: r["usd"] or 0, reverse=True)[:10]:
print(row)
Without Ultra, this call fails, so catch the error and fall back to the single-card endpoint. There are also an official TypeScript and Python SDK, with typed results and automatic pagination, and a hosted MCP server if you'd rather ask an AI client for prices.
card_text can contain HTML <br> tags and Windows line endings, so strip them before rendering:
const clean = (text) => text?.replace(/<br>\s*/g, "\n").replace(/\r/g, "").trim();
How It Compares to YGOPRODeck
YGOPRODeck is the obvious comparison, and a good one. According to its API guide (checked November 7, 2026), the API is free and needs no key, its cardinfo.php endpoint covers the full card database, and each card's card_prices lists Cardmarket (€), TCGplayer ($), eBay ($), Amazon ($) and CoolStuffInc ($). It also states the rules: 20 requests per second (going over blocks you for an hour), card data cached on its side for two days, and images that you should download once and host yourself rather than hotlink. If you build a deck tool or a card database for one game, it may be all you need.
The guide also says each price in card_prices is the lowest found across that card's versions. That is the main difference for a price tracker. PokéWallet, which is our product, works differently:
- Prices per version and edition. The regular and the Extended Art Dark Magician, the Pharaoh's Servant are separate cards ($2.77 and $127.19 on TCGplayer), and TCGplayer prices come per edition, with low, mid, high and market for each.
- Cardmarket's own averages. Each Cardmarket price carries
low,trend,avg,avg1,avg7andavg30, so you can smooth a spike without storing history yourself. - One key, twelve games. The same
X-API-Keyand the same response shape cover Pokémon, One Piece, Magic, Lorcana, Riftbound and the rest. If your product spans several games, you write one client.
What it does not do: no eBay or Amazon prices, no grading data and no price history for Yu-Gi-Oh!. History exists only for Pokémon. Prices are daily snapshots, so don't use them for second-by-second arbitrage. And unlike YGOPRODeck, PokéWallet needs a key, with a free tier of 1,000 requests a day.
My recommendation: if you need card data and a single price per card, YGOPRODeck is free and fine. If you need prices per print and edition, Cardmarket and TCGplayer side by side, or a second game, use one multi-game key from day one and skip the rewrite later.
Frequently Asked Questions
Is there a free Yu-Gi-Oh! price API?
Yes. The PokéWallet free tier gives you 100 requests/hour and 1,000/day with no credit card, and single-card and search responses include TCGplayer and Cardmarket prices. YGOPRODeck is free too and needs no key. Whole-set prices and analytics on PokéWallet require Ultra or the 7-day trial.
Does the API have Cardmarket prices for Yu-Gi-Oh!?
Yes. Each card carries Cardmarket prices in EUR, split into normal and foil, with low, trend, avg, avg1, avg7 and avg30. Each print version, such as V.1 and V.2 of the same card, is a separate product with its own prices.
Can I get 1st Edition and Unlimited prices separately?
Yes. TCGplayer prices come per edition in sub_type_name, so a card printed in both returns one entry for 1st Edition and one for Unlimited, each with low, mid, high and market prices.
How often are Yu-Gi-Oh! prices updated?
TCGplayer and Cardmarket prices refresh once a day. The updated_at field on each price shows the last time that price changed, not the time you made the request.
How many Yu-Gi-Oh! sets does the API cover?
The set list reported 709 sets on November 7, 2026, including promo sets, Cardmarket-only sets and Japanese sets. GET /ygo/sets returns them all with card counts, sealed counts, language and release date.
Do I need Ultra to get Yu-Gi-Oh! prices?
Not for individual cards. Card lookups and search include prices on every plan. You need Ultra (€29/month) or the 7-day trial for prices of whole sets, statistics, completion value, trending sets and top cards. Pro is not enough for Yu-Gi-Oh!.
Can I use one API key for Yu-Gi-Oh! and other card games?
Yes. One key covers twelve games, from Pokémon and One Piece to Magic, Yu-Gi-Oh!, Lorcana and Riftbound, each under its own path such as /ygo/ or /mtg/.
💬 Price disclaimer: All figures come from PokéWallet API responses captured on November 7, 2026. TCGplayer prices are in USD and Cardmarket prices are in EUR; each carries its own updated_at stamp. They are daily snapshots, not quotes, and not financial advice.
Start Building with the PokéWallet API
Everything in this guide runs on the free tier up to the Ultra sections, and the same key works across the other eleven games. Get a key, search a card, and see both marketplaces in one response. Our multi-game API overview shows the rest of the catalog, and the Yu-Gi-Oh! docs cover every parameter.
- 🔑 One API key for 12 trading card games — Pokémon, One Piece, Magic, Yu-Gi-Oh!, Lorcana, Riftbound and more
- 📊 TCGplayer & Cardmarket prices for every card, refreshed daily
- 🆓 Free plan with 1,000 requests a day — sets, cards, search and images on every game
- ⚡ Ultra unlocks set-wide prices and analytics for every game — try it free for 7 days from your dashboard
- 💬 Developer support in our Discord
Get Started:
- 🚀 Get a free API key
- 📖 Read the API documentation
- 💳 Compare plans on the pricing page
This article is for informational purposes only and is not financial advice. Details reflect information available at the time of writing; release dates, pricing and set contents are subject to change. Card prices are volatile — always verify current market pricing before buying or selling.