API Getting Started
Live Pokémon TCG market data — try the playground free, then unlock the full API
Last updated:
For agentsLink copied!
Prefer the markdown copy of this section — this HTML page is for humans:
- This guide: https://silphcoanalytics.xyz/docs/api/getting-started.md
- Skill: https://silphcoanalytics.xyz/skill-api.md
First call — card-hero Midprice or Last, same dollars as the card page:
curl "https://silphcoanalytics.xyz/api/v3/quote?q=42382"When data.status is resolved, speak data.label (Midprice or Last) and data.price_usd — check data.price_basis before treating it as a live market price. ambiguous returns up to 5 candidates. Then load the skill for set trending-cards, chart-series, and the research sidecar. Thin FMV slots on source=silph stay empty. Sale days, including n=1, are source=observed with pick=all.
- MCP: https://silphcoanalytics.xyz/docs/reference/mcp — dashboard Bearer key (free tier works)
- OpenAPI: https://silphcoanalytics.xyz/openapi-public.json
Try it nowLink copied!
No signup required. First call is the card-hero quote, not trending:
Midprice or Last (Base Set Charizard, TCGPlayer 42382)
curl "https://silphcoanalytics.xyz/api/v3/quote?q=42382"Find a card by name
Use base set charizard or 42382 — not a bare charizard (price-weighted rank).
curl "https://silphcoanalytics.xyz/api/v3/search?q=base+set+charizard&limit=5"Playground responses include X-LOR-Tier: playground. Want more? Sign in for a free API key (1,000 requests/day).
MCPLink copied!
Streamable HTTP at https://silphcoanalytics.xyz/api/v3/mcp/ (trailing slash — the bare path 307s). Same dashboard Bearer as REST. A free key works. No key returns 401 — there is no anonymous MCP playground. Keyless quote stays on REST GET /quote.
Ten public tools: search, quote, get_prices, get_sales, get_listings, batch_grade_ladder, compare_set_finish, pin_cohort, get_cohort, and rank_set_sales. Setup: MCP docs.
RecipesLink copied!
Quote a card, search by name, or pull the research sidecar with a TCGPlayer productId. Playground quote needs no key. MCP and chart-series need a dashboard Bearer key.
1. Quote a card
Name, TCGPlayer productId, or tcg_card_id. Speak data.label Midprice or Last and data.price_usd.
curl "https://silphcoanalytics.xyz/api/v3/quote?q=42382"2. Search by name
Take tcg_card_id from results, then GET /quote?q=. Per-slot Midprice is GET /cards/{id}/midprice.
curl "https://silphcoanalytics.xyz/api/v3/search?q=base+set+charizard&limit=5"3. Per-slot Midprice
Grade/finish Midprice slots — not the card-hero quote. Digits on q= are TCGPlayer productIds (42382 is Base Set Charizard). Hyphenated ids are ours (base1-4).
curl "https://silphcoanalytics.xyz/api/v3/cards/42382/midprice"4. Historical prices
source=silph is the historical price ledger (thin slots may be empty). source=observed is grader-true sale days (sample_count may be 1). source=tcgplayer is variant × condition tape. source=all is silph+tcgplayer only. Use pick=all for slabs. There is no PriceCharting source. Keyed GET cap is 250 ids. For 1000 ids use POST /prices with JSON {ids:[...]}. Optional since/until is a closed YYYY-MM-DD range.
curl "https://silphcoanalytics.xyz/api/v3/prices?ids=42382&source=silph"
curl "https://silphcoanalytics.xyz/api/v3/prices?ids=42382&source=observed&pick=all&since=2024-01-01&until=2024-12-31"
curl -H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids":["42382"]}' \
"https://silphcoanalytics.xyz/api/v3/prices?source=observed&pick=all&since=2024-01-01&until=2024-12-31"5. Sales tape
curl "https://silphcoanalytics.xyz/api/v3/sales?ids=42382&agg=day&since=2026-08-01&until=2026-08-31"6. Listings
curl "https://silphcoanalytics.xyz/api/v3/listings?ids=42382&marketplace=ebay"
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://silphcoanalytics.xyz/api/v3/listings?set_id=base1&marketplace=ebay"Quick startLink copied!
- Create an account and generate an API key at the dashboard.
- Send the key as a Bearer token on every request.
- Browse the interactive reference for parameters and response shapes.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://silphcoanalytics.xyz/api/v3/cards?limit=1"AuthenticationLink copied!
Most /api/v3 data routes require Authorization: Bearer YOUR_API_KEY. Requests without a valid key return HTTP 401.
Playground plus Free / Pro / Elite apply at https://silphcoanalytics.xyz:
| Tier | Auth | Limits |
|---|---|---|
| Playground | No API key | 1 req/s, 50-row cap, 50 ids · Full unrestricted history |
| Free | Bearer API key | 1,000 requests/day |
| Pro | Bearer API key | 5,000 requests/day |
| Elite | Bearer API key | 10,000 requests/day |
History is not clamped by tier. Free and Pro see the same series; Pro has a higher daily cap.
Playground routes work without a key on the same URLs:
/api/v3/cards/{id}/api/v3/catalog/api/v3/catalog/cards/api/v3/listings/api/v3/lookup/api/v3/prices/api/v3/quote/api/v3/sales/api/v3/search/api/v3/sets/api/v3/sets/{id}/api/v3/prices/api/v3/resolve
Add a Bearer token on any route to use your account tier. Collection /sales is the public tape (may include PriceCharting comps). Per-card /cards/{id}/sales is keyed product UI and can show a different venue mix. Responses include X-LOR-Tier: playground on keyless calls.
Check daily usage with GET /keys/usage using the same Bearer token (includes history_days).
Listings: use GET /api/v3/listings?ids=base1-4 for live asks. Legacy GET /api/v3/shop/listings is a beta LoR passthrough — prefer /listings.
EndpointsLink copied!
Base URL: https://silphcoanalytics.xyz/api/v3
Cards
| Method | Path | Description |
|---|---|---|
| GET | /api/v3/cards/{id} | Card identity + headline dollars (playground slims the gold dump) |
| GET | /api/v3/cards/{id}/analytics | Card analytics |
| GET | /api/v3/cards/{id}/chart-series | Card-page history (sale_date × grade × finish) |
| GET | /api/v3/cards/{id}/facts | Cited card facts (lor-api thin proxy) |
| GET | /api/v3/cards/{id}/monthly-marks | PriceCharting monthly price-guide marks (lor-api thin proxy) |
| GET | /api/v3/cards/{id}/oracle-mark/history | Oracle-mark history series (lor-api thin proxy) |
| GET | /api/v3/cards/{id}/sales/history | /api/v3/cards/{id}/sales/history |
| GET | /api/v3/cards/{id}/tcgplayer-history | TCGplayer daily price and sales history |
| GET | /api/v3/catalog | Priceable catalog ids (keyed; cursor pages; cost = 1/page; game= filters dump) |
| GET | /api/v3/catalog/cards | Alias of /catalog (keyed; cursor pages; cost = 1/page) |
| GET | /api/v3/sets/{id}/cards | Paginated cards in a set with per-card volume and price fields (lor-api thin proxy) |
| POST | /api/v3/cards/batch | Batch core-card lookup by tcg_card_id (same as GET /cards/{id}; not productIds; cost = unique ids; max 250) |
Market
| Method | Path | Description |
|---|---|---|
| GET | /api/v3/listings | Live listings / asks (ids= or set_id=; productId ok) |
| GET | /api/v3/market/card | Multi-venue card market: asks + sales + oracle (lor-api thin proxy) |
| GET | /api/v3/market/card/{id} | Multi-venue card market by id (lor-api thin proxy) |
| GET | /api/v3/market/landing-ticker | Landing-page market ticker, cached (lor-api thin proxy) |
| GET | /api/v3/market/price-series | /api/v3/market/price-series |
| GET | /api/v3/market/window-changes | Per-card 7/30/90d price window changes (lor-api thin proxy) |
| GET | /api/v3/marketplaces/collector_crypt/inventory | Collector Crypt inventory headline: stock / redeemed / platform (lor-api thin proxy) |
| GET | /api/v3/prices | Historical prices (ids= tcg_card_id or TCGPlayer productId) |
| GET | /api/v3/sales | Verified sales tape (ids= or set_id=; productId ok) |
| GET | /api/v3/sales/export.csv | Agent/export: sales CSV download for one card (lor-api thin proxy) |
| GET | /api/v3/shop/listings | Legacy shop listings passthrough (beta; prefer GET /listings) |
| POST | /api/v3/prices | Historical prices, JSON {ids} (same prices.v1 job; keyed cap 1000) |
Meta
| Method | Path | Description |
|---|---|---|
| GET | /api/v3/meta/freshness | Data-plane surface freshness (lor-api thin proxy) |
| GET | /api/v3/meta/min-app-version | /api/v3/meta/min-app-version |
| GET | /api/v3/og/{card_id}.png | /api/v3/og/{card_id}.png |
| GET | /api/v3/platform/{lane}/leaderboard/pulls | Platform pull leaderboard (lor-api thin proxy) |
| GET | /api/v3/platform/{lane}/leaderboard/traders | Platform trader leaderboard (lor-api thin proxy) |
| GET | /api/v3/quote | Card-hero Midprice or Last (usable midprice else chart Last) |
| POST | /api/v3/mcp | /api/v3/mcp |
| POST | /api/v3/me/imports/confirm | /api/v3/me/imports/confirm |
| POST | /api/v3/me/imports/preview | /api/v3/me/imports/preview |
| POST | /api/v3/quote | /api/v3/quote |
| POST | /api/v3/resolve | Bulk-resolve TCGPlayer productIds / tcg_card_ids (resolved + missing) |
| POST | /api/v3/scanner/match | /api/v3/scanner/match |
Search
| Method | Path | Description |
|---|---|---|
| GET | /api/v3/lookup | Resolve a card or set identifier |
| GET | /api/v3/search | Full-text card search |
| GET | /api/v3/search-quota | /api/v3/search-quota |
| POST | /api/v3/search-quota/consume | /api/v3/search-quota/consume |
Sets
| Method | Path | Description |
|---|---|---|
| GET | /api/v3/sets | List sets |
| GET | /api/v3/sets/{id} | Set detail |
| GET | /api/v3/sets/{id}/population | Set graded population overview (Pro tier; lor-api thin proxy) |
| GET | /api/v3/sets/{id}/trending-cards | Trending cards in a set |
Response envelopeLink copied!
Every v3 response uses silphco-envelope.v1. The payload lives in data; the contract field names its schema version.
PaginationLink copied!
Lists accept offset and limit (max 200). Per-card sales use an opaque next_cursor to page through history (API key required; playground returns at most 50 rows and next_cursor: null).
ErrorsLink copied!
Errors return contract: "error.v1" with error.code and error.message. HTTP 401 indicates a missing or invalid key. For removed routes, 404 with error.code: "removed" includes error.details.replacement pointing at the supported path.
Finding cardsLink copied!
You do not need a Pokémon TCG card ID to start. Playground calls need no API key. Use GET /api/v3/search?q=base+set+charizard or q=42382. Catalog browse GET /api/v3/cards requires a key (it is not the try-it door). For a full list of priceable ids use keyed GET /api/v3/catalog (do not paginate /search). Resolve fuzzy names with GET /api/v3/lookup, then GET /api/v3/quote?q= or GET /api/v3/cards/{id}/midprice.
Shared filters include language, grader, rarity, variant, min_price / max_price, sort, window, slab_only, and raw_only.
Card IdentityLink copied!
Cards are uniquely identified by a combination of set code and print number:
| Type | Format | Examples |
|---|---|---|
| English Cards | {set_id}-{number} | base1-4, sv3-197 |
| Japanese (TCGdex) | {jp_set_code}-{number} | s12a-239, sv4pt5-232 |
| Japanese (TCGCSV) | jp-{slug}-{number} | jp-pokemon-card-151-001 |
Print Variants & FinishesLink copied!
Cards with the same ID can exist in different variant runs or finishes. These are treated as separate asset nodes for pricing and uniqueness:
| Variant Slug | Display Label | Description |
|---|---|---|
| normal | Normal | Standard non-holographic printing finish. |
| holofoil | Holofoil | Standard holographic artwork finish. |
| reverse_holofoil | Reverse Holofoil | Holographic finish applied to the body/frame of the card. |
| 1st_edition | 1st Edition | Early first-edition print run. |
| 1st_edition_holofoil | 1st Edition Holofoil | Early first-edition holographic print run. |
| unlimited | Unlimited | Standard post-first-edition print run. |
| unlimited_holofoil | Unlimited Holofoil | Standard post-first-edition holographic print run. |
| cardmarket | Cardmarket | Cardmarket finish/printing variations. |
ExamplesLink copied!
# Search (playground)
curl "https://silphcoanalytics.xyz/api/v3/search?q=base+set+charizard&limit=5"
# Card-hero quote (playground)
curl "https://silphcoanalytics.xyz/api/v3/quote?q=42382"
# Per-slot Midprice (keyed)
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://silphcoanalytics.xyz/api/v3/cards/42382/midprice"
# Historical price ledger (may be empty on thin cards)
curl "https://silphcoanalytics.xyz/api/v3/prices?ids=42382&source=silph"
# Observed sale days (n=1 kept; pick=all for slabs; closed date window)
curl "https://silphcoanalytics.xyz/api/v3/prices?ids=42382&source=observed&pick=all&since=2024-01-01&until=2024-12-31"
# Keyed POST, same prices.v1 job, cap 1000
curl -H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids":["42382"]}' \
"https://silphcoanalytics.xyz/api/v3/prices?source=observed&pick=all&since=2024-01-01&until=2024-12-31"
# Sales tape
curl "https://silphcoanalytics.xyz/api/v3/sales?ids=42382"
# Listings by marketplace or set
curl "https://silphcoanalytics.xyz/api/v3/listings?ids=42382&marketplace=ebay"ReferenceLink copied!
- Interactive API reference — parameters, schemas, and try-it-out
- OpenAPI JSON (public) — curated data routes for Postman or typed client generation
- MCP — Streamable HTTP for agents
- /skill-api.md — agent skill