Games & Comics — entry 067 of 75

TCGdex

Verified Sep 2026

TCGdex is a keyless, multilingual Pokémon TCG database exposing card, set, and series data via both REST and GraphQL over eight-plus languages. The old `tcgdex.net/docs` link stopped working after that domain was rebuilt as a separate consumer collection-manager app; the API's own docs and reference now live at `tcgdex.dev`.

TCGdex is a keyless, multilingual Pokémon TCG database where the locale is a path segment, not a query option. A live GET this run against /en/cards/swsh3-136 returned a genuine 2,943 B card object at HTTP 200, content-type: application/json; charset=utf-8.

pokemontrading-card-gamemultilingualkeyless
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSON, GraphQLResponses can be requested as JSON or GraphQL.

GreatAPIs Score

Score100out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs20/20Machine-readable spec file bundled
Formats15/15Supports 2 response formats
Freshness20/20Verified within 6 months

Embed this badge

Scored 100 on greatapis.com
<a href="https://greatapis.com/api/tcgdex/"><img src="https://greatapis.com/badge/tcgdex.svg" alt="Scored 100 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required — the live GET above returned real card data with no auth header of any kind attached. access-control-allow-origin: * was present, so direct browser fetches work too.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

Servers
https://api.tcgdex.net/v2/{lang}
cards2

Fetch cards globally

GET/cardsfetch the list of cards
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/cards/{cardId}Find card by ID
Parameters
NameInRequiredType
cardIdpathyesstring
Responses
StatusDescriptionSchema
200Successful requestCard
400
404
500
filters26

differents requests to filter cards

GET/categoriesGet all categories
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/categories/{category}Get cards by category
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
categorypathyesstring
Responses
StatusDescriptionSchema
200Successful requestStringEndpoint
400
404
500The Category doesn't exist
GET/dex-idsGet all Pokedex IDs
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/dex-ids/{dexId}Get cards by Pokedex ID
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
dexIdpathyesstring
Responses
StatusDescriptionSchema
200Successful request
400
404
500no cards contain the specified dexID
GET/energy-typesGet all energy types
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/energy-types/{energy-type}Get cards by energy type
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
energy-typepathyesstring
Responses
StatusDescriptionSchema
200Successful request
400
404
500The specified energy-type doesn't exist
GET/hpGet all HP values
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/hp/{hp}Get cards by HP value
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
hppathyesstring
Responses
StatusDescriptionSchema
200Successful requestStringEndpoint
400
404
500The HP count doesn't exist
GET/illustratorsGet all illustrators
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/illustrators/{illustrator}Get cards by illustrator
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
illustratorpathyesstring
Responses
StatusDescriptionSchema
200Successful requestStringEndpoint
400
404
500The Illustrator doesn't exist
GET/raritiesGet all rarities
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/rarities/{rarity}Get cards by rarity
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
raritypathyesstring
Responses
StatusDescriptionSchema
200Successful requestStringEndpoint
400
404
500The Rarity doesn't exist
GET/regulation-marksGet all regulation marks
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/regulation-marks/{regulation-mark}Get cards by regulation mark
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
regulation-markpathyesstring
Responses
StatusDescriptionSchema
200Successful request
400
404
500The regulation-mark doesn't exist
GET/retreatsGet all retreat costs
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/retreats/{retreat}Get cards by retreat cost
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
retreatpathyesstring
Responses
StatusDescriptionSchema
200Successful requestStringEndpoint
400
404
500The Retreat count doesn't exist
GET/stagesGet all Pokemon stages
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/stages/{stage}Get cards by stage
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
stagepathyesstring
Responses
StatusDescriptionSchema
200Successful request
400
404
500The stage doesn't exist
GET/suffixesGet all card suffixes
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/suffixes/{suffix}Get cards by suffix
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
suffixpathyesstring
Responses
StatusDescriptionSchema
200Successful request
400
404
500The suffix doesn't exist
GET/trainer-typesGet all trainer types
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/trainer-types/{trainer-type}Get cards by trainer type
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
trainer-typepathyesstring
Responses
StatusDescriptionSchema
200Successful request
400
404
500The trainer-type doesn't exist
GET/typesGet all types
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/types/{type}Get cards by type
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
typepathyesstring
Responses
StatusDescriptionSchema
200Successful request
400
404
500The Type doesn't exist
GET/variantsGet all card variants
Parameters
NameInRequiredType
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/variants/{variant}Get cards by variant
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
variantpathyesstring
Responses
StatusDescriptionSchema
200Successful request
400
404
500The variant doesn't exist
series2
GET/seriesGet all series
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/series/{serie}Find series by ID
Parameters
NameInRequiredType
seriepathyesstring
Responses
StatusDescriptionSchema
200Successful requestSerie
400
404
500The Serie doesn't exist
sets3
GET/setsGet all sets
Parameters
NameInRequiredType
filtersquerynoobject
sort:fieldquerynostring
sort:orderquerynostring
pagination:pagequerynointeger
pagination:itemsPerPagequerynointeger
Responses
StatusDescriptionSchema
200Successful request
400
500
GET/sets/{set}Find set by ID
Parameters
NameInRequiredType
setpathyesstring
Responses
StatusDescriptionSchema
200Successful requestSet
400
404
500The Set doesn't exist
GET/sets/{set}/{cardLocalId}Find card by set and local ID
Parameters
NameInRequiredType
setpathyesstring
cardLocalIdpathyesstring
Responses
StatusDescriptionSchema
200Successful requestCard
400
404
500the Set or cardLocalId are incorrect

Try it

Developer reference

Base URLhttps://api.tcgdex.net/v2/en
Key endpoints
  • GET/cards/{cardId}
  • GET/sets/{set}
  • GET/sets
  • GET/series

Gotchas & limits

  • The locale is a first-class path segment, and getting it wrong produces a different error type than a bad card id, not the same 404. A live GET this run against /en/cards/nosuchcard returned HTTP 404, 171 B, a problem-document shape: {"type":"https://tcgdex.dev/errors/not-found","title":"The resource you are trying to reach does not exists","status":404,"endpoint":"/en/cards/nosuchcard","method":"GET"}. Swapping the locale for an invalid one instead (/zz/cards/swsh3-136) returned a different 404, 355 B: {"type":"https://tcgdex.dev/errors/language-invalid","title":"The chosen language is not available in the database","status":404,"endpoint":"/zz/cards/swsh3-136","method":"GET","lang":"zz","details":"You must use one of the following languages (en, fr, es, es-mx, it, pt, pt-br, pt-pt, de, nl, pl, ru, ja, ko, zh-tw, id, th, zh-cn) while you used \"zz\""} — code that only checks status === 404 can't tell a typo'd id from a typo'd locale without reading type.
  • GraphQL is served on the same host at /v2/graphql, but a plain GET to it does not run your query — a live GET this run against /v2/graphql?query={__typename} returned HTTP 200 with 1,694,752 B of text/html (the GraphiQL IDE page), not a JSON result. Queries need a POST with a JSON body.
  • Asset URLs embedded in card/set objects (like image above) are deliberately incomplete — they resolve to a real image only after appending /{quality}.{format} (e.g. /high.png, confirmed live 200 image/png 327,364 B this run); fetching the bare URL from the object is a confirmed live 404.
  • The response content-type includes charset=utf-8 explicitly (application/json; charset=utf-8, confirmed on both the card and the error responses this run) — an exact-match check against application/json alone will fail.

Availability

Uptime100%
Median latency339 ms
Last checkUp · 200 · Sep 2026

2 checks since Sep 2026. A person runs this check by hand, not an automated monitor.

Changelog

Spec version2
Tracked paths33
  • Sep 2026gained an OpenAPI spec

Tracking since Sep 2026. See every tracked change ↗ ·Subscribe with RSS ↗