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 21 Aug 2026

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 21 Aug 2026, 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

Alternatives to TCGdex API

If TCGdex does not fit, these game & anime apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.

APIWhat it doesAuthCORSLast verified
PokéAPIFree Pokémon API with no key: stats, types, abilities, moves, evolutions and sprites for 1,000+ species. The most popular API for learning REST. Tested example.No keyYes19 Aug 2026
Rick and Morty APIFree Rick and Morty API with no key: 800+ characters, episodes and locations with images, filtering and pagination. REST and GraphQL. Tested example.No keyYes19 Aug 2026
Jikan (MyAnimeList)Free unofficial MyAnimeList API with no key: anime and manga data, scores, characters, staff and seasonal listings. Tested curl example and live JSON.No keyYes19 Aug 2026
Deck of CardsFree playing card API with no key: shuffle decks, draw cards, manage piles and get card images. Stateful deck ids. Tested curl example and live JSON.No keyYes19 Aug 2026
TETR.IO Tetra ChannelFree TETR.IO Tetra Channel API with no key: player records, TETRA LEAGUE ranks, global leaderboards and live service-wide statistics. Tested example and real response.No keyNo21 Aug 2026
trace.moeFree reverse image search for anime with no API key. Send a screenshot URL and trace.moe returns the series, episode and exact timestamp, with a video preview. Live example.No keyYes21 Aug 2026
All Game & Anime APIs

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