Skip to content
Crypto-only, prepaid. Top up a balance and we draw from it monthly — nothing is ever charged automatically.
tcggraph

pokemontcg.io · Pokémon only

Pokémon TCG API alternative — pokemontcg.io compared

pokemontcg.io is the community standard for Pokémon card data. TCGGraph offers the same Pokémon coverage plus seven more games, normalised prices from five marketplaces and a stricter uptime commitment.

What Pokémon TCG API does well

  • Free, well documented and the default choice for Pokémon projects for years.
  • Complete English card pool with clean attack, weakness and resistance modelling.
  • Simple REST design that is easy to learn in an afternoon.
  • A large ecosystem of community libraries built on top of it.

Where TCGGraph differs

  • Coverage stops at Pokémon. TCGGraph carries the same Pokémon data plus Magic, One Piece, Yu-Gi-Oh!, Lorcana, Star Wars: Unlimited, Digimon and Grand Archive.
  • We serve Japanese printings linked to their English counterparts through a shared card identity.
  • Prices come from five marketplaces with daily history rather than a single source snapshot.
  • We publish an uptime SLA on paid plans and a public status page.

Side by side

Feature comparison

FeaturePokémon TCG APITCGGraph
Games coveredPokémon only8 games
Japanese printings linked to English
Price historyCurrent pricesDaily, to 2019
European prices (Cardmarket)Pokémon onlyAll 8 games
Price sourcesTCGplayer, Cardmarket5 sources
GraphQL
Webhooks
Published uptime SLA99.95% on paid
PriceFreeFrom $19/mo

When to use Pokémon TCG API instead

If you are building something Pokémon-only and free is the deciding factor, pokemontcg.io is a fine choice and has served the community well for a long time. It is one of our upstream sources. Consider TCGGraph when you need a second game, Japanese-to-English card linking, deeper price history, or an availability guarantee you can point a customer at.

Migration

What the change looks like

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

Pokémon TCG API
# pokemontcg.io
curl "https://api.pokemontcg.io/v2/cards?q=name:charizard" \
  -H "X-Api-Key: $POKEMONTCG_KEY"
TCGGraph
# TCGGraph
curl "https://api.tcggraph.com/v1/cards?game=pokemon&name=charizard" \
  -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.

  • Rate limits are shaping your product — you are batching, backing off or caching aggressively to stay inside them.
  • You need price history rather than today's number, for a portfolio, an alert or a repricing job.
  • Your app has grown past Pokémon and now needs a second game with the same shape of data.
  • You need somebody to answer when the data is wrong or the service is down.

Migration

Moving off Pokémon TCG API, step by step

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

  1. Step 1

    Translate the query syntax

    The Pokémon TCG API uses a Lucene-style q parameter, so q=types:fire hp:[300 TO *] becomes types=Fire&minHp=300. Ranges become min and max prefixes and every field name keeps its meaning, which makes this mostly mechanical.

  2. Step 2

    Move game fields under their namespace

    Fields that sit at the top level there — hp, types, attacks, weaknesses — live under gameData in REST and under the typed pokemon field in GraphQL. Everything shared between games, like name, set, rarity and prices, stays at the top level. One find-and-replace usually covers it.

  3. Step 3

    Adopt the price series

    Where you currently read a single tcgplayer price object, you get a series per marketplace and condition. Take the market value from your preferred source to reproduce current behaviour, then add history when you want it.

  4. Step 4

    Stop pre-emptive caching

    A lot of Pokémon TCG API integrations cache hard to stay under the rate limit. Credits meter work rather than requests, cached 304 responses cost nothing and images are never metered, so the cache you built to survive rate limiting is often no longer earning its complexity.

Field mapping

What each field becomes

The part that takes the longest is discovering that Pokémon TCG API spells the same concept differently. Here it is, written down.

Pokémon TCG APITCGGraphNotes
ididDifferent format, same role. Ours is prefixed by game.
hp (string)gameData.hp (int)Typed as an integer, so numeric filters work.
types[]gameData.types[]Same values, moved under the namespace.
attacks[]gameData.attacks[]Same shape: name, cost, damage, text.
set.idset.codeSame identifier, renamed for consistency across games.
tcgplayer.pricesprices[]An array across five sources rather than one object.
legalities.standardlegalities.standardSame keys and values.
images.largeimages.largeUnmetered on both.

FAQ

Common questions

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