Skip to content
Prepaid, no subscription trap. Top up a balance and we draw the monthly fee from it.
tcggraph

YGOPRODeck · Yu-Gi-Oh! only

YGOPRODeck API alternative — Yu-Gi-Oh! data compared

YGOPRODeck is the reference Yu-Gi-Oh! card API and it is free. TCGGraph covers the English TCG card pool and adds eight more games, per-printing prices, GraphQL and legality webhooks behind one key.

What YGOPRODeck API does well

  • Free and comprehensive, with the full Yu-Gi-Oh! card pool including OCG-only cards.
  • Ban list data across TCG, OCG and GOAT, kept current.
  • Rich archetype metadata that is genuinely hard to reproduce.
  • A large, active community and a deck builder people actually use.

Where TCGGraph differs

  • Coverage stops at Yu-Gi-Oh!. TCGGraph uses one schema across eight more games.
  • Legality changes emit signed webhooks instead of requiring you to diff a poll.
  • Every printing carries its own Cardmarket and TCGplayer prices per finish, 1st Edition included, with daily history.
  • GraphQL lets a deck view fetch cards across several games in one round trip.

Side by side

Feature comparison

FeatureYGOPRODeck APITCGGraph
Games coveredYu-Gi-Oh! only9 games
TCG and OCG ban lists
GOAT ban list
Lookup by passcode
Archetype metadata
Legality-change webhooks
Price historyCurrent pricesDaily, accumulating
European prices (Cardmarket)One EUR figureTrend, averages, depth
GraphQL
PriceFreeFrom $29/mo

When to use YGOPRODeck API instead

For a Yu-Gi-Oh!-only deck builder or ban list tracker, YGOPRODeck is free, complete and well maintained — use it. TCGGraph makes sense once you need a second game, per-printing prices, or webhooks instead of polling. It does not carry the passcode, so a YDK-driven tool is better served there.

Migration

What the change looks like

Concepts map closely. Most migrations are a single afternoon of find-and-replace plus a test pass.

YGOPRODeck API
# YGOPRODeck
curl "https://db.ygoprodeck.com/api/v7/cardinfo.php?attribute=light&atk=gte3000"
TCGGraph
# TCGGraph
curl "https://api.tcggraph.com/v1/cards?game=yugioh&attribute=LIGHT&minAtk=3000" \
  -H "Authorization: Bearer $TCGGRAPH_KEY"

Signals

When it is worth switching

None of these are reasons on their own. Two or three together usually are.

  • You want Cardmarket and TCGplayer prices per printing and per finish, 1st Edition included, rather than one price per card.
  • You want price history for Yu-Gi-Oh! singles, which reprint constantly and move a great deal in price.
  • You are adding another game and would rather not maintain a second, differently-shaped integration.
  • You need an uptime commitment for something customer-facing.

Migration

Moving off YGOPRODeck API, step by step

The honest version, including the parts that are not one-to-one.

  1. Step 1

    Re-key from the passcode to the printing

    YGOPRODeck's id is the Konami passcode. The passcode is not carried here: a record is one printing, keyed by its set code (ygo_macr_en036, collectorNumber MACR-EN036). Resolve each passcode in your data to a name once, with YGOPRODeck, then look the printings up by name. This is the real cost of the migration, so budget for it.

  2. Step 2

    Read the banlist from gameData

    banlist_info.ban_tcg and ban_ocg become gameData.banlist.tcg and gameData.banlist.ocg, with lower-case values (forbidden, limited, semi_limited, unlimited) and unlimited written out rather than left absent. Filter on either with banlist.tcg=forbidden. The GOAT list is not carried.

  3. Step 3

    Move monster stats under gameData

    atk, def, level, attribute and race move under gameData, in REST and GraphQL alike. linkval becomes linkRating, linkmarkers becomes linkMarkers, scale becomes pendulumScale, and the archetype string becomes the archetypes array.

  4. Step 4

    Turn card_sets into records

    Instead of an array of set appearances hanging off the card, each printing is its own record, with its own set, rarity, image and prices. That is what makes per-printing pricing possible, which for a game with dozens of reprints of a staple is the difference between a useful price and a meaningless average.

Field mapping

What each field becomes

The part that takes the longest is discovering that YGOPRODeck API spells the same concept differently. Here it is, written down.

YGOPRODeck APITCGGraphNotes
id— (not carried)The passcode; resolve it to a name once.
card_sets[].set_codecollectorNumberOne record per set appearance, e.g. MACR-EN036.
atk / defgameData.atk / gameData.defIntegers. def is null on Link monsters.
levelgameData.levelHolds rank for Xyz monsters; check frameType.
racegameData.raceSame values: Warrior, Dragon, Quick-Play…
linkvalgameData.linkRatingArrows are gameData.linkMarkers[].
banlist_infogameData.banlist.tcg / .ocgAlso in legalities. No GOAT list.
card_pricesprices[]Per source and finish, with a daily history endpoint.

FAQ

Common questions

Anything else, email hello@tcggraph.com. We will tell you if the answer is that you should stay where you are.