Konami · since 1999
Yu-Gi-Oh! Trading Card Game API
ATK, DEF, level, rank, link rating, pendulum scale, attribute and archetype, plus the TCG and OCG Forbidden & Limited lists.
- 14,010
- Cards
- 38,435
- Printings
- 661
- Sets
- 1
- Languages
- English
Overview
What the Yu-Gi-Oh! dataset covers
Yu-Gi-Oh! remains one of the Big Three and is resurgent in 2026. TCGGraph structures the TCG card pool — Normal, Effect, Ritual, Fusion, Synchro, Xyz, Pendulum and Link monsters plus Spells and Traps — with ATK, DEF, level, rank, link rating and markers, pendulum scales, attributes, monster types and archetype membership, alongside the TCG and OCG Forbidden & Limited status of every card, re-read on every ingest.
Forbidden & Limited status is carried per list — TCG and OCG, which change on different dates — instead of being flattened into one ban flag that is wrong for one of them.
Formats
- Advanced
- Traditional
- OCG
Price sources
- Cardmarket
- TCGplayer
curl -G "https://api.tcggraph.com/v1/cards" \
-d game=yugioh \
-d limit=5 \
-H "Authorization: Bearer $TCGGRAPH_KEY"{
cards(
filter: { game: YUGIOH, gameData: { attribute: "LIGHT", level: 8 } }
) {
nodes {
name
gameData
}
}
}Schema
Yu-Gi-Oh!-specific fields
Every card carries the shared core fields. These live under gameData, in REST and GraphQL alike, and each is a filter: ?cost=2 in REST, gameData: { cost: 2 } in GraphQL.
| Field | Type | Description |
|---|---|---|
| frameType | Enum | normal, effect, ritual, fusion, synchro, xyz, link, spell, trap, token or skill; Pendulum monsters add _pendulum (effect_pendulum, xyz_pendulum…). |
| attribute | Enum | DARK, LIGHT, EARTH, WATER, FIRE, WIND or DIVINE. |
| race | String | Monster type, or spell and trap sub-category. |
| atk | Int | Attack points. -1 represents ?. |
| def | Int | Defense points. Null for Link monsters. |
| level | Int | Level, or Rank on Xyz monsters. Null on Link monsters, spells and traps. |
| linkRating | Int | Link rating for Link monsters. |
| linkMarkers | [String] | Arrow directions: Top, Bottom, Left, Right, Top-Left, Top-Right, Bottom-Left, Bottom-Right. |
| pendulumScale | Int | Blue and red pendulum scale value. |
| archetypes | [String] | Archetype membership. |
| banlist | Object | Status on the tcg and ocg lists: unlimited, semi_limited, limited or forbidden. Filter as banlist.tcg=forbidden. |
Plus 26 core fields shared by every game — see the full reference.
Live data
Yu-Gi-Oh! cards in the public dataset
Real records returned by the API right now, sorted by market value, with both the American and the European quote.
| Card | Set | Number | Rarity | TCGplayer | Cardmarket |
|---|---|---|---|---|---|
| Genex Neutron | The Shining Darkness | TSHD-EN097 | Secret Rare | $3.62 | €2.29 |
| Skull Archfiend of Chaos | Chaos Origins | CORI-EN002 | Starlight Rare | $2.63 | — |
| Blackwing - Tornado the Reverse Wind | 2017 Mega-Tin Mega Pack | MP17-EN067 | Common | $0.48 | €0.12 |
| Unchained Soul of Anguish | Battles of Legend: Monster Mayhem | BLMM-EN158 | Ultra Rare | $0.24 | €0.31 |
| Mannadium Abscission | Cyberstorm Access | CYAC-EN057 | Super Rare | $0.23 | €0.19 |
| Blindly Loyal Goblin | Dark Crisis | DCR-022 | Common | $0.20 | €0.65 |
| Changshi the Spiridao | Maze of Muertos | MZMU-EN097 | Rare | $0.15 | €0.08 |
| Gold Sarcophagus | Pharaoh Tour 2007 promotional cards | PT03-EN001 | Ultra Rare | — | €8,000 |
The most valuable Yu-Gi-Oh! cards and their prices — each printing with Cardmarket and TCGplayer quotes, per language and grade.
The European market for Yu-Gi-Oh!
Konami prints separate European editions with their own set codes, and the 1st Edition versus Unlimited split does not map onto the American one. European cards also carry an eye-of-Anubis holofoil rather than the American square, which is why matching by name alone produces the wrong price.
Traded on Cardmarket in German, French, Italian, Spanish, Portuguese beyond English. How European pricing works.
Sets
Notable Yu-Gi-Oh! sets
LOB
Legend of Blue Eyes White Dragon
126 cards · 2002-03-08
RA04
Quarter Century Bonanza
300 cards · 2025-05-15
BUPR
Burst Protocol
100 cards · 2026-01-16
RA05
Rarity Collection V
300 cards · 2026-04-10
Modelling
Working with Yu-Gi-Oh! data
The decisions that catch people out when they first integrate Yu-Gi-Oh!. Each of these is a bug we have watched somebody ship.
A record is a printing, keyed by set code
Each printing is its own record: ygo_macr_en036 is Ash Blossom & Joyous Spring in Maximum Crisis, with collectorNumber MACR-EN036 as printed on the card. The eight-digit passcode is not carried, so a YDK deck list has to be resolved by name. Group printings by name for gameplay and keep them apart for anything touching money.
Monster kinds change which fields exist
Xyz monsters keep their Rank in level. Link monsters have level and def null and carry linkRating and linkMarkers instead. Pendulum monsters carry pendulumScale and a frameType ending in _pendulum. Spells and traps have no atk, def or level, and race holds their sub-category (Quick-Play, Continuous, Field…). Treat null as absent, never as zero.
Two banlists, on different schedules
The TCG and OCG Forbidden & Limited lists are separate and change at different times, so Ash Blossom can be unlimited in one and semi-limited in the other. banlist carries both as tcg and ocg (forbidden, limited, semi_limited, unlimited). Filter on the one your players use: banlist.tcg=forbidden.
Reprints are relentless
A staple can have dozens of printings across core sets, structure decks, tins and collector boxes, with a large spread between the first and the latest. name=ash blossom returns every one of them; sort=price with a source picks the cheapest.
Recipes
Common Yu-Gi-Oh! queries
Three requests that cover most of what applications in this game actually ask for.
Every printing of one card, cheapest first
Singles buyers want the least expensive copy, not the most famous one.
name matches a part of the name. source picks the marketplace price sorts on; printings without a TCGplayer quote sort last.
GET /v1/cards
?game=yugioh
&name=ash blossom
&source=tcgplayer
&sort=priceHigh-attack LIGHT monsters that are unlimited in the TCG
A stat threshold, an attribute and the current banlist in one query.
banlist is an object, so its keys are filtered with a dot. The value is re-read on every ingest, so the filter follows each list update.
GET /v1/cards
?game=yugioh
&attribute=LIGHT
&minAtk=3000
&banlist.tcg=unlimitedEverything in an archetype
Archetype support is how most Yu-Gi-Oh! decks are built.
archetypes is a list and matches exactly (case aside), so Branded does not also return Branded Despia unless the card lists both.
GET /v1/cards
?game=yugioh
&archetypes=Branded
&limit=100Glossary
Yu-Gi-Oh! terms, and the fields that hold them
What players call a thing on the left, what you query on the right.
| Term | Field | Notes |
|---|---|---|
| Level / Rank | gameData.level | Level, or Rank on Xyz monsters (check frameType). Null on Link monsters, spells and traps. |
| Link rating | gameData.linkRating | Link monsters only. The arrows are gameData.linkMarkers[], as Top, Bottom-Left and so on. |
| Pendulum scale | gameData.pendulumScale | Pendulum monsters only. One number: the left and right scales are equal on every card. |
| Attribute | gameData.attribute | DARK, LIGHT, EARTH, WATER, FIRE, WIND or DIVINE. |
| Type | gameData.race | Warrior, Dragon, Spellcaster… on monsters; Quick-Play, Continuous, Field, Equip, Counter on spells and traps. |
| Archetype | gameData.archetypes[] | Archetype membership, which is not always inferable from the name. |
| Banlist status | gameData.banlist.tcg | forbidden, limited, semi_limited or unlimited; banlist.ocg for the OCG list. Also mirrored in legalities. |
| 1st Edition | prices[].finish | 1st-edition is priced as its own finish, next to normal and foil, and listed on printings[]. |
FAQ
Yu-Gi-Oh! API questions
Anything not covered here, email hello@tcggraph.com and a human who knows Yu-Gi-Oh! answers.
Also available
Add another game without another integration
Your Yu-Gi-Oh! key already works for every other game in the catalog. Change the YUGIOH enum and the rest of your code stays as it is.