BYTETOOLS

TCGdex API

Free Pokémon Trading Card Game API with no key: every set and card in 10+ languages, with images, card counts and full card data. Tested curl example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the TCGdex API?

TCGdex is a free, open-source Pokémon Trading Card Game API that requires no API key. It serves every set and card ever printed, with multilingual data in more than ten languages plus card images, and offers both a REST and a GraphQL interface.

TCGdex covers the entire Pokémon TCG back to Base Set in 1999, and its distinguishing feature is language coverage. The language code sits directly in the path — `/v2/en/sets`, `/v2/fr/sets`, `/v2/ja/sets` — so building a card app for a non-English audience needs no translation layer of your own, which is rare among free game APIs.

The data model is two levels deep and predictable: `/sets` lists every set with an id and card count, and `/sets/{id}` expands to the full card list for that set. Card images are served from a separate assets CDN and the URLs come back without an extension, so you append the quality and format you want, such as `/high.png` or `/low.webp`.

Quick facts

Base URL
https://api.tcgdex.net/v2
Authentication
No API key, no account, no rate-limit headers. The whole dataset is open source on GitHub and community-maintained.
Rate limit
No published limit. Responses are CDN-cached, so repeated reads are cheap.
Pricing
Free and open source (MIT).
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the TCGdex API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. List every Pokémon TCG set in English

GET https://api.tcgdex.net/v2/en/sets

curl
curl 'https://api.tcgdex.net/v2/en/sets'
JavaScript (fetch)
const res = await fetch("https://api.tcgdex.net/v2/en/sets");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.tcgdex.net/v2/en/sets", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "id": "miscp",
    "name": "Miscellaneous Promos",
    "cardCount": {
      "total": 1,
      "official": 1
    }
  },
  {
    "id": "base1",
    "name": "Base Set",
    "logo": "https://assets.tcgdex.net/en/base/base1/logo",
    "cardCount": {
      "total": 102,
      "official": 102
    }
  },
  {
    "id": "base2",
    "name": "Jungle",
    "logo": "https://assets.tcgdex.net/en/base/base2/logo",
    "symbol": "https://assets.tcgdex.net/univ/base/base2/symbol",
    "cardCount": {
      "total": 64,
      "official": 64
    }
  },
  {
    "id": "basep",
    "name": "Wizards Black Star Promos",
    "logo": "https://assets.tcgdex.net/en/base/basep/logo",
    "symbol": "https://assets.tcgdex.net/univ/base/basep/symbol",
    "cardCount": {
      "total": 53,
      "official": 53
    }
  },
  {
    "id": "wp",
    "name": "W Promotional",
    "cardCount": {
      "total": 7,
      "official": 7
    }
  },
  {
    "id": "base3",
    "name": "Fossil",
    "logo": "https://assets.tcgdex.net/en/base/base3/logo",
    "symbol": "https://assets.tcgdex.net/univ/base/base3/symbol",
    "cardCount": {
      "total": 62,
      "official": 62
    }
  },
  {
    "id": "jumbo",
    "name": "Jumbo cards",
    "cardCount": {
      "total": 160,
      "official": 160
    }
  },
  {
    "id": "base4",
    "name": "Base Set 2",
    "logo": "https://assets.tcgdex.net/en/base/base4/logo",
    "symbol": "https://assets.tcgdex.net/univ/base/base4/symbol",
    "cardCount": {
      "total": 130,
      "official": 130
    }
  },
  {
    "id": "base5",
    "name": "Team Rocket",
    "logo": "h

Parameters

ParameterTypeRequiredDescription
langpath segmentRequiredTwo-letter language code: `en`, `fr`, `de`, `es`, `it`, `pt`, `ja`, `ko`, `zh-tw`, `id`, `th`, `nl`, `pl`, `ru`. en
resourcepath segmentRequired`sets`, `cards`, `series`, `types`, `rarities` or any of the other filterable attributes. sets
idpath segmentOptionalA set or card id, appended to expand a single record with its full data. base1
pagination:pagequeryOptionalPage through large collections such as the full card list. Pairs with `pagination:itemsPerPage`. 1

Response fields

idstring
Stable set identifier such as `base1` or `swsh12`, used to fetch that set's cards.
namestring
Set name in the requested language.
logo / symbolstring
Asset base URLs with no file extension — append `/high.png`, `/low.webp` and so on. Both are absent for sets that never had artwork, so guard for undefined.
cardCount.totalinteger
Every card in the set including secret rares.
cardCount.officialinteger
The printed set size — the denominator on the card, for example the 102 in 4/102.

What you can build with the TCGdex API

  • Build a Pokémon card collection tracker with images and set completion
  • Add a card search or lookup to a Discord bot
  • Populate a deckbuilder with legal cards for a given set or series
  • Localise a TCG app for French, Japanese or Korean players without your own translations

Common errors and how to fix them

404

Unknown language code, set id or card id.

Fix: Language codes are lowercase two-letter, with `zh-tw` the exception. Set ids are lowercase alphanumeric — fetch `/sets` first rather than guessing.

Missing logo / symbol

Not an error: older and promotional sets often have no artwork.

Fix: Always null-check these fields before building an image URL.

TCGdex API — frequently asked questions

Is the TCGdex API free and does it require an API key?

It is completely free and needs no key or account. TCGdex is an open-source, community-maintained project and the underlying dataset is published on GitHub under the MIT licence.

How do I get Pokémon card images from TCGdex?

The `logo`, `symbol` and card `image` fields are base URLs without a file extension. Append a quality and format — for example `/high.png` for full resolution or `/low.webp` for thumbnails — to build a usable image URL.

Which languages does TCGdex support?

More than ten, including English, French, German, Spanish, Italian, Portuguese, Japanese, Korean, Traditional Chinese, Indonesian, Thai, Dutch, Polish and Russian. The language is the first path segment, so switching is a one-token change.

Does TCGdex include card prices?

No. It covers card data, sets and images. Market prices come from separate commercial sources, so pair it with a pricing API if your app needs valuations.

Tools that pair with this API

TCGdex is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.