Public API v1
Free, auditable card-market data.
Every price on CardPricer is backed by observable comps from public marketplaces and verifiable on-chain sales. The Public API gives you read-only access to the same data that drives our front end — cards, players, sets, sales, and the full provenance behind every quoted price. Open CORS. No signup needed for the free tier.
Developer kit
One-click integrations: Postman collection, OpenAPI spec, and a freshness endpoint.
Quickstart
Two GET requests, no auth, in any HTTP client.
# Top basketball cards by current price
curl "https://cardpricer.co/api/v1/cards?sport=basketball&limit=10"
# Recent sales across the platform
curl "https://cardpricer.co/api/v1/sales?limit=25"Every response is wrapped in a stable envelope so you can rely on the shape across releases:
{
"ok": true,
"apiVersion": "1.0.0",
"generatedAt": "2026-05-17T18:30:00.000Z",
"data": [ ... ],
"meta": { "pagination": { ... }, "filters": { ... } }
}Authentication
The free tier is anonymous (60 req/min). Pass ?apiKey=YOUR_KEY or set the X-Api-Key header for 600 req/min. CardPricer Pro subscribers can generate personal keys in settings. Partners can still request env keys via api@cardpricer.app.
| Tier | Per minute | Per hour |
|---|---|---|
| Anonymous | 60 | 1,000 |
| Keyed | 600 | 30,000 |
Limits are enforced per IP for anonymous traffic and per key for authenticated traffic. Every response includes X-RateLimit-Remaining-Minute and X-RateLimit-Reset-Hour headers.
Personal API keys (600 req/min) is part of CardPricer Pro.
Email alerts, personal API keys, portfolio exports, and portfolio value alerts — $19/mo. The terminal stays free.
View Pro plansEndpoints
/api/v1Self-documenting root. Lists every endpoint with its parameters.
/api/v1/cardsPaginated card directory. Filter by sport, player, year, manufacturer, grade, or price range.
qFree-form match against player / set / cardNumber / gradesportCanonical slug: basketball, baseball, pokemon, mtg, yu-gi-oh, …playerPlayer slug (preferred) or substringyear, manufacturer, gradeExact-match filtersminPrice, maxPriceBounds on current_pricesortprice_desc (default) · price_asc · recent · volumelimit, offsetPagination — limit max 200/api/v1/cards?sport=pokemon&minPrice=500&sort=volume&limit=25/api/v1/cards/{id}Single card with inline provenance summary (comp count, source mix, confidence).
/api/v1/cards/00000000-0000-0000-0000-000000000000/api/v1/cards/{id}/provenanceFull provenance: every comp behind the price, per-source breakdown, per-strategy match attribution (each comp records which matcher rule attributed it), confidence factors, and warnings.
/api/v1/cards/00000000-0000-0000-0000-000000000000/provenance/api/v1/cards/{id}/historyOHLCV candles for a card. Daily, Weekly, Monthly, or Yearly buckets.
intervalD · W · M · Y (default D)/api/v1/cards/00000000-0000-0000-0000-000000000000/history?interval=W/api/v1/playersPaginated player directory backed by the canonical players table.
qSubstring match against canonical namesportCanonical sport slugsortvolume_desc · top_price_desc · total_value_desc · name_asclimit, offsetPagination — limit max 500/api/v1/players?sport=basketball&sort=top_price_desc&limit=20/api/v1/players/{slug}Full player profile including the card folder this player owns.
/api/v1/players/stephen-curry/api/v1/setsSealed-product set directory with aggregate top product price and 30-day volume.
sport, manufacturer, yearExact-match filterslimit, offsetPagination — limit max 500/api/v1/sets?sport=pokemon&year=2024&limit=20/api/v1/sets/{slug}Single set with all products and recent price history.
daysHistory window in days (1–365, default 90)history0 to skip price history/api/v1/sets/2024-topps-chrome-baseball/api/v1/salesChronological feed of recent observed comps. Defaults to actual sales — pass include=listing,quote to expand.
sportCanonical sport slug filtersourceComma-separated list, e.g. "ebay,collector-crypt"includeComma-separated observation types: sale (default), listing, quoteminPrice, maxPricePrice boundssince, untilISO timestamps to bound the windowcursorISO sold_date — paginate older with sold_date < cursorlimitPage size (max 200)/api/v1/sales?sport=basketball&source=ebay,collector-crypt&limit=25/api/v1/openapi.jsonMachine-readable OpenAPI 3.1 spec. Drop into Postman, Insomnia, or any SDK generator.
/api/v1/openapi.json/api/v1/censusCard census: supply, circulation, and coverage across the whole catalog — total cards, how many are tokenized on-chain (Web3) vs off-chain (Web2), known printed supply, 30-day circulation, and the priced/supply coverage gaps. Includes a per-category breakdown.
/api/v1/census/api/v1/statusData-freshness report per upstream source — when each venue was last ingested and how many rows landed in the last 24h / 7d.
/api/v1/status/docs/api/postmanAuto-generated Postman v2.1 collection. Import into Postman or Insomnia and start hitting the API in one click.
/docs/api/postmanThe provenance contract
Every card carries a confidence label (High / Medium / Low / Insufficient) backed by four independent factors: comp count, median age, dispersion (σ as % of mean), and source diversity. The breakdown lives at /api/v1/cards/{id}/provenance and is also embedded inline on every single-card response.
Today we feed comps from eBay (sold + active), Scryfall (MTG), the Pokémon TCG API, YGOPRODeck (Yu-Gi-Oh), and on-chain Collector Crypt sales (USDC, Solana). Adding a new venue does not change the response shape — it just adds rows to comps.bySource.
See the methodology page for the full recipe.
Terms of use
- Attribution. If you display CardPricer data on a public surface, link back to cardpricer.co from the page that uses it.
- No price manipulation. The API is read-only. Don't use it to feed an aggregator that obscures the source.
- No guarantee of accuracy. Comps are observed prices, not quotes. Bad listings get through — verify before transacting.
- No reselling raw bulk dumps. Build something useful on top of it. For bulk licensing, email api@cardpricer.app.
Next
Try it.
Hit the discovery root and follow the links — every endpoint includes self-referential links so you can crawl the API without leaving the response.