TCGFish APItcgfish.net ↗
Access Pokemon TCG market indices, momentum metrics, 12-month historical data, and card price search via the TCGFish.net API. 3 endpoints, no auth setup required.
What is the TCGFish API?
The TCGFish.net API provides 3 endpoints for querying Pokemon TCG market data: index-level performance metrics for the Graded (PSA 10), Sealed, Top 100, and Top 250 indices; up to 12 months of daily historical data points per index via get_index_detail; and paginated card price search across the full TCGFish catalog. Each card result includes rarity, edition, foil type, set name, artist, and current market prices.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/a731060a-9db8-4865-8df8-f74fef91d989/list_indices' \ -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 tcgfish-net-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.
"""Walkthrough: TCGFish SDK — Pokemon TCG market indices and card search."""
from parse_apis.tcgfish_pokemon_card_market_indices_api import (
TCGFish, IndexSlug, IndexNotFound
)
client = TCGFish()
# List all market indices to see overall market health.
for idx in client.indexsummaries.list(limit=4):
print(idx.name, idx.level, idx.change_7d)
# Drill into the graded index for detailed momentum and historical data.
graded = client.indexsummary(slug="graded").detail()
print(graded.title, graded.level, graded.as_of_date)
for period, change in graded.momentum.items():
print(f" {period}: {change}")
# Access historical data points on the detailed index.
if graded.historical_points:
point = graded.historical_points[0]
print(point.date, point.value)
# Fetch a different index by enum to compare performance.
sealed = client.indexes.get(slug=IndexSlug.SEALED)
print(sealed.title, sealed.level)
# Search for cards by keyword, bounded iteration.
for card in client.cards.search(query="pikachu", limit=3):
print(card.name, card.set_name, card.prices.ungraded)
# Typed error handling: catch IndexNotFound on an invalid slug lookup.
try:
client.indexes.get(slug=IndexSlug.GRADED)
except IndexNotFound as exc:
print(f"Index not found: {exc.slug}")
print("exercised: indexsummaries.list / indexsummary.detail / indexes.get / cards.search")
List all Pokemon TCG market indices with their current level, 7-day and 30-day performance changes. Returns data for the Graded Index (PSA 10), Sealed Index, Top 100 Most Valuable, and Top 250 Index. Always returns all four indices in a single response with no pagination.
No input parameters required.
{
"type": "object",
"fields": {
"indices": "array of IndexSummary objects with name, slug, level, change_7d, change_30d, description"
},
"sample": {
"data": {
"indices": [
{
"name": "Graded Index (PSA 10)",
"slug": "graded",
"level": 140.64,
"change_7d": "+1.96%",
"change_30d": "+4.99%",
"description": "Fixed, equal-weighted basket of the Top 250 English Pokémon cards (PSA 10). Rebalanced monthly and updated daily."
},
{
"name": "Sealed Index",
"slug": "sealed",
"level": 118.66,
"change_7d": "-0.01%",
"change_30d": "+2.52%",
"description": "Fixed, equal-weighted basket of the Top 100 Pokémon sealed products. Rebalanced monthly and updated daily."
},
{
"name": "Top 100 Most Valuable",
"slug": "top-100",
"level": 116.2,
"change_7d": "+1.85%",
"change_30d": "+3.68%",
"description": "Fixed, equal-weighted basket of the Top 100 English Pokémon cards. Rebalanced monthly and updated daily."
},
{
"name": "Top 250 Index",
"slug": "top-250",
"level": 116.83,
"change_7d": "+1.80%",
"change_30d": "+3.95%",
"description": "Fixed, equal-weighted basket of the Top 250 English Pokémon cards. Rebalanced monthly and updated daily."
}
]
},
"status": "success"
}
}About the TCGFish API
Market Indices
The list_indices endpoint returns all four TCGFish market indices in a single call — Graded Index (PSA 10), Sealed Index, Top 100 Most Valuable, and Top 250 Index. Each index object includes its current level, change_7d, change_30d, a human-readable description, and a slug that can be passed directly to get_index_detail. No parameters are required.
Index Detail and Historical Data
get_index_detail accepts one of four slug values (graded, sealed, top-100, top-250) and returns extended data for that index: the momentum object breaks down percentage-change performance across 7d, 30d, and 90d periods, and historical_points provides an ordered array of {date, value} objects covering approximately the last 12 months. The as_of_date field indicates when the index level was last updated.
Card Price Search
search_cards accepts a required query string (card name or keyword such as charizard or base set) and an optional page integer for pagination. Each page returns up to 20 results sorted by value. Card objects include name, number, rarity, artist, edition, foil_type, set_name, set_slug, image_url, and a prices object with current market pricing. The total field in the response indicates how many matching cards exist across all pages.
The TCGFish API is a managed, monitored endpoint for tcgfish.net — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when tcgfish.net 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 tcgfish.net 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?+
- Chart Pokemon TCG market trends by plotting
historical_pointsfromget_index_detailover the past 12 months. - Build a portfolio tracker that flags index movements using
change_7dandchange_30dfromlist_indices. - Compare sealed vs. graded market momentum using the
90dfield from both index detail responses. - Look up current market prices for a specific card by querying
search_cardswith the card name and reading thepricesfield. - Filter search results by
rarity,edition, orfoil_typeafter retrieving paginatedsearch_cardsresponses. - Monitor the Top 100 Most Valuable index level daily using the
gradedandtop-100slugs on a scheduled basis. - Identify which sets contain a keyword by aggregating
set_namevalues across paginatedsearch_cardsresults.
| 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 TCGFish have an official developer API?+
What does the `momentum` object in `get_index_detail` actually contain?+
7d, 30d, and 90d — each holding a percentage string representing how much the index level has changed over that period. It does not include raw point values for those periods, only the percentage change.How far back does the historical data in `get_index_detail` go?+
historical_points array covers approximately the last 12 months of daily index values. Data older than 12 months is not returned by this endpoint.Does the API return individual card sale history or transaction records?+
search_cards and index-level historical data via get_index_detail, but not per-card transaction history or sale logs. You can fork this API on Parse and revise it to add an endpoint targeting individual card price history if that data becomes accessible.Can I filter `search_cards` results by set, rarity, or edition before results are returned?+
search_cards endpoint accepts only a query string and a page number as inputs. Filtering by rarity, set_name, or edition is not available as a server-side parameter. You can fork this API on Parse and revise it to add those filter parameters as a separate endpoint.