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.
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
<a href="https://greatapis.com/api/tcgdex/"><img src="https://greatapis.com/badge/tcgdex.svg" alt="Scored 100 on greatapis.com"></a>
Auth quickstart
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
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/cards/{cardId}Find card by ID
Parameters
Name
In
Required
Type
cardId
path
yes
string
Responses
Status
Description
Schema
200
Successful request
Card
400
—
—
404
—
—
500
—
—
filters26
differents requests to filter cards
GET/categoriesGet all categories
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/categories/{category}Get cards by category
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
category
path
yes
string
Responses
Status
Description
Schema
200
Successful request
StringEndpoint
400
—
—
404
—
—
500
The Category doesn't exist
—
GET/dex-idsGet all Pokedex IDs
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/dex-ids/{dexId}Get cards by Pokedex ID
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
dexId
path
yes
string
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
404
—
—
500
no cards contain the specified dexID
—
GET/energy-typesGet all energy types
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/energy-types/{energy-type}Get cards by energy type
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
energy-type
path
yes
string
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
404
—
—
500
The specified energy-type doesn't exist
—
GET/hpGet all HP values
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/hp/{hp}Get cards by HP value
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
hp
path
yes
string
Responses
Status
Description
Schema
200
Successful request
StringEndpoint
400
—
—
404
—
—
500
The HP count doesn't exist
—
GET/illustratorsGet all illustrators
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/illustrators/{illustrator}Get cards by illustrator
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
illustrator
path
yes
string
Responses
Status
Description
Schema
200
Successful request
StringEndpoint
400
—
—
404
—
—
500
The Illustrator doesn't exist
—
GET/raritiesGet all rarities
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/rarities/{rarity}Get cards by rarity
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
rarity
path
yes
string
Responses
Status
Description
Schema
200
Successful request
StringEndpoint
400
—
—
404
—
—
500
The Rarity doesn't exist
—
GET/regulation-marksGet all regulation marks
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/regulation-marks/{regulation-mark}Get cards by regulation mark
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
regulation-mark
path
yes
string
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
404
—
—
500
The regulation-mark doesn't exist
—
GET/retreatsGet all retreat costs
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/retreats/{retreat}Get cards by retreat cost
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
retreat
path
yes
string
Responses
Status
Description
Schema
200
Successful request
StringEndpoint
400
—
—
404
—
—
500
The Retreat count doesn't exist
—
GET/stagesGet all Pokemon stages
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/stages/{stage}Get cards by stage
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
stage
path
yes
string
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
404
—
—
500
The stage doesn't exist
—
GET/suffixesGet all card suffixes
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/suffixes/{suffix}Get cards by suffix
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
suffix
path
yes
string
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
404
—
—
500
The suffix doesn't exist
—
GET/trainer-typesGet all trainer types
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/trainer-types/{trainer-type}Get cards by trainer type
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
trainer-type
path
yes
string
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
404
—
—
500
The trainer-type doesn't exist
—
GET/typesGet all types
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/types/{type}Get cards by type
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
type
path
yes
string
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
404
—
—
500
The Type doesn't exist
—
GET/variantsGet all card variants
Parameters
Name
In
Required
Type
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/variants/{variant}Get cards by variant
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
variant
path
yes
string
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
404
—
—
500
The variant doesn't exist
—
series2
GET/seriesGet all series
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/series/{serie}Find series by ID
Parameters
Name
In
Required
Type
serie
path
yes
string
Responses
Status
Description
Schema
200
Successful request
Serie
400
—
—
404
—
—
500
The Serie doesn't exist
—
sets3
GET/setsGet all sets
Parameters
Name
In
Required
Type
filters
query
no
object
sort:field
query
no
string
sort:order
query
no
string
pagination:page
query
no
integer
pagination:itemsPerPage
query
no
integer
Responses
Status
Description
Schema
200
Successful request
—
400
—
—
500
—
—
GET/sets/{set}Find set by ID
Parameters
Name
In
Required
Type
set
path
yes
string
Responses
Status
Description
Schema
200
Successful request
Set
400
—
—
404
—
—
500
The Set doesn't exist
—
GET/sets/{set}/{cardLocalId}Find card by set and local ID
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.