Pokemontcg APIpokemontcg.io ↗
Search and retrieve Pokémon TCG card data from Scrydex. Get card stats, attacks, abilities, rarity, set info, and pricing via 2 clean REST endpoints.
What is the Pokemontcg API?
This API provides access to Pokémon Trading Card Game data from the Scrydex catalog via 2 endpoints. Use search_cards to query cards by name or keyword across the full catalog with pagination, or use get_card to fetch a specific card's complete profile — including HP, types, attacks, weaknesses, retreat cost, artist, rarity, set series, and current pricing — by its set-number ID.
curl -X GET 'https://api.parse.bot/scraper/78fc7d93-b8d7-43af-9b1c-ec212e99c77e/search_cards?page=1&query=charizard&page_size=5' \ -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-io-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 search and detail lookup via Scrydex."""
from parse_apis.pokemon_tcg_card_api_via_scrydex import Scrydex, CardNotFound
client = Scrydex()
# Search for Charizard cards — limit caps total items fetched across pages.
for card in client.cardsummaries.search(query="charizard", limit=5):
print(card.name, card.set_name, card.price)
# Drill into the first result for full details.
summary = client.cardsummaries.search(query="pikachu", limit=1).first()
if summary:
detail = summary.details()
print(detail.name, detail.hp, detail.types, detail.rarity)
if detail.attacks:
for atk in detail.attacks:
print(atk.name, atk.damage, atk.cost)
if detail.weaknesses:
for w in detail.weaknesses:
print(w.type, w.value)
# Typed error handling for a missing card.
try:
bad = client.cardsummaries.search(query="zzz_nonexistent", limit=1).first()
if bad:
bad.details()
except CardNotFound as exc:
print(f"Card not found: {exc.card_id}")
print("exercised: cardsummaries.search / CardSummary.details / CardNotFound")
Full-text search over the Pokémon TCG card catalog by keyword. Returns paginated card summaries including name, set, price, and image. Server-side pagination with 20 results per page. Each card summary includes an id usable with get_card for full details.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| queryrequired | string | Search keyword matching card names (e.g. 'charizard', 'pikachu', 'mewtwo') |
| page_size | integer | Maximum number of results to return per page (up to 20). |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"cards": "array of card summary objects with id, name, set_name, price, variant, image_url, url",
"query": "string, the search keyword used",
"total_pages": "integer, total number of pages available",
"total_results": "integer, total number of matching cards"
},
"sample": {
"data": {
"page": 1,
"cards": [
{
"id": "clc-3",
"url": "https://scrydex.com/pokemon/cards/charizard/clc-3?variant=holofoil",
"name": "Charizard #3",
"price": "$212.87",
"variant": "holofoil",
"set_name": "Pokémon TCG Classic - Charizard",
"image_url": "https://images.scrydex.com/pokemon/clc-3/medium"
}
],
"query": "charizard",
"total_pages": 13,
"total_results": 259
},
"status": "success"
}
}About the Pokemontcg API
Search Cards
The search_cards endpoint accepts a query string (e.g. charizard, detective pikachu) and returns a paginated list of matching cards. Each result in the cards array includes an id, name, set_name, price, variant, image_url, and a direct url to the card's Scrydex page. Pagination is controlled via the page and page_size parameters (up to 20 results per page). The response also includes total_results and total_pages so clients can walk the full result set.
Get Card Detail
The get_card endpoint accepts a card_id in set-number format — for example base1-4, sv1-1, or mcd24-1 — and returns a single card object with the full card profile. Fields include hp, types, supertype, subtypes, attacks (with names, costs, and damage), abilities, weaknesses, resistances, retreat_cost, artist, rarity, flavor_text, set_name, set_series, number, printed_number, and pricing data. This covers vintage base set cards through recent Scarlet & Violet releases and McDonald's promotional sets.
Pricing and Images
Both endpoints surface pricing data. The search results include a price and variant field per card, useful for quick market scans across a query. The detail endpoint provides deeper pricing context alongside image_url for card art. IDs follow a consistent {set_code}-{number} convention, making it straightforward to construct lookups after a search.
The Pokemontcg API is a managed, monitored endpoint for pokemontcg.io — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when pokemontcg.io 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.io 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 price tracker that monitors Charizard variant prices across sets using
search_cardswith pagination - Populate a deck-builder app with full card stats — attacks, HP, types, weaknesses — via
get_card - Generate a set checklist by searching a set name and collecting all returned card IDs and
printed_numbervalues - Display card art and flavor text in a Pokémon TCG reference app using
image_urlandflavor_textfromget_card - Compare rarity and pricing across card variants by querying a Pokémon name and reading the
variantandpricefields - Feed a collection valuation tool by resolving owned card IDs through
get_cardto retrieve current pricing data - Identify cards by artist using the
artistfield returned fromget_cardfor a given set-number ID
| 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 pokemontcg.io have an official developer API?+
What does `get_card` return beyond basic card stats?+
get_card returns the full card object including attacks (with move names, costs, and damage values), abilities, weaknesses, resistances, retreat_cost, flavor_text, artist, rarity, set_series, printed_number, and pricing. The card_id must be in set-number format, such as base1-4 or sv1-1.Can I filter `search_cards` by set, type, or rarity?+
search_cards endpoint filters by keyword query only — there are no dedicated parameters for set name, card type, or rarity. To narrow by those fields, retrieve a broader result set and filter on the returned set_name or other fields client-side. You can fork this API on Parse and revise it to add structured filter parameters.Does the API return card legality or tournament format information?+
How does pagination work in `search_cards`?+
page parameter selects which page to return and page_size controls how many results appear per page (maximum 20). The response includes total_pages and total_results so you can determine how many requests are needed to walk the full result set for a given query.