Pokemontcg APIpokemontcg.com ↗
Access Pokémon TCG card details, set listings, and reference data for types, rarities, and subtypes. Search by name, browse by set, or fetch a specific card by ID.
What is the Pokemontcg API?
This API provides 8 endpoints covering Pokémon Trading Card Game cards and expansions sourced from scrydex.com. Use get_card to fetch a single card by its expansion-number ID and get back fields like HP, supertype, subtypes, rarity, set name, and a card image URL. search_cards returns paginated results with optional pricing data, while four reference endpoints expose the complete lists of types, subtypes, supertypes, and rarities used across the card database.
curl -X GET 'https://api.parse.bot/scraper/a3e1aedd-c6ad-40d2-98d6-c3789b31167b/get_card?card_id=clc-3' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace pokemontcg-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Pokémon TCG card discovery — search cards, browse sets, fetch details."""
from parse_apis.pokémon_tcg_api import PokemonTCG, CardNotFound
client = PokemonTCG()
# Search for Charizard cards across all expansions.
for card in client.cards.search(query="charizard", limit=5):
print(card.name, card.set_name, card.price)
# Drill into one card's full details (HP, rarity, image).
summary = client.cards.search(query="pikachu", limit=1).first()
if summary:
detail = summary.details()
print(detail.name, detail.hp, detail.rarity, detail.supertype)
# Browse sets filtered by name.
for s in client.sets.search(query="base", limit=3):
print(s.name, s.release_date)
# Fetch full set info including card list.
set_summary = client.sets.search(query="base", limit=1).first()
if set_summary:
full_set = set_summary.details()
print(full_set.name, full_set.total_cards)
# Handle a missing card gracefully.
try:
detail = client.cards.search(query="charizard", limit=1).first()
if detail:
detail.details()
except CardNotFound as exc:
print(f"Not found: {exc}")
print("Exercised: cards.search, CardSummary.details, sets.search, SetSummary.details")
Get details for a specific Pokémon TCG card by ID. Returns card name, HP, supertype, subtypes, image URL, set name, and rarity. The card ID follows the format expansion-number (e.g. base1-4, swsh4-25).
| Param | Type | Description |
|---|---|---|
| card_idrequired | string | Card ID in format expansion-number (e.g. base1-4, sv1-1, swsh4-25). |
{
"type": "object",
"fields": {
"hp": "string HP value or absent",
"id": "string card identifier",
"name": "string card name",
"image": "string URL to card image",
"rarity": "string rarity level",
"set_name": "string name of the expansion set",
"subtypes": "array of subtype strings",
"supertype": "string supertype (Pokémon, Trainer, Energy)"
},
"sample": {
"data": {
"hp": "120",
"id": "base1-4",
"name": "Charizard",
"image": "https://images.scrydex.com/pokemon/base1-4/medium",
"rarity": "Rare Holo",
"set_name": "Chaos Rising",
"subtypes": [
"Stage 2"
],
"supertype": "Pokémon"
},
"status": "success"
}
}About the Pokemontcg API
Card Lookup and Search
get_card accepts a card_id in the format expansion-number (e.g. base1-4, swsh4-25, sv1-1) and returns a single card object with fields including id, name, hp, supertype, subtypes (array), rarity, set_name, and an image URL. The hp field may be absent for non-Pokémon cards such as Trainers and Energy.
search_cards accepts an optional query string (card name substring, e.g. charizard) and an optional page integer for pagination. Each result in the data array includes id, name, set_name, url, and an optional price field when pricing data is available. The response also returns total, page, and has_next to support page-by-page traversal.
Set and Expansion Data
get_set takes a set_id (e.g. base1, sv1, swsh1) and returns the full set record: id, name, logo URL, total_cards, and a cards array listing every card in the expansion with its id, name, and url. search_sets lists all sets with id, name, release_date, and url. An optional query parameter filters by name substring. All sets are returned on a single page regardless of the page parameter.
Reference Endpoints
Four parameter-free endpoints return static reference lists: get_types returns all energy type strings, get_subtypes returns all card subtypes (e.g. Basic, Stage 1, GX, V), get_supertypes returns the three top-level categories (Pokémon, Trainer, Energy), and get_rarities returns all rarity tier strings. These are useful for populating filter dropdowns or validating values before issuing a card search.
The Pokemontcg API is a managed, monitored endpoint for pokemontcg.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when pokemontcg.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official pokemontcg.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a card collection tracker that uses
get_cardto populate HP, rarity, and image for each card in a user's binder. - Create a set completion checklist by calling
get_setto retrieve all cards in an expansion and tracking which ones a user owns. - Power a card price browser using
search_cardsresults that include the optionalpricefield alongside card name and set. - Populate filter dropdowns in a TCG deck-builder using
get_rarities,get_types, andget_subtypesreference data. - Build a set release timeline by fetching
release_datefor every expansion viasearch_sets. - Implement autocomplete for card searches by querying
search_cardswith partial name strings and reading thenamefield from results. - Generate a card catalog for a fan site by paginating through all cards with
search_cardsand resolving full details withget_card.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Pokémon TCG have an official developer API?+
What does `search_cards` return and when does the `price` field appear?+
data array includes id, name, set_name, and url. The price field appears only when pricing data is available for that card; it is absent otherwise. The response also includes total, page, and has_next for pagination.Does `search_sets` support paginated responses?+
page parameter. The total field reflects the full count of sets. The page input is accepted but has no effect on the number of results returned.Does the API expose card attack details, retreat costs, or weaknesses?+
get_card returns name, hp, supertype, subtypes, rarity, set_name, and image. Attack text, damage values, retreat cost, and weakness/resistance data are not included in the current response shape. You can fork this API on Parse and revise it to add those fields.Can I filter `search_cards` results by set, rarity, or supertype?+
search_cards endpoint currently filters only by card name via the query parameter. Filtering by set ID, rarity tier, or supertype is not supported at this endpoint. You can fork this API on Parse and revise it to add those filter parameters.