Pokemon Card Prices API
Individual sale records for Pokemon cards from eBay, Goldin, Heritage, and more. PSA-graded cards, vintage base set, modern sets — real transaction prices, not estimates. Free to start.
Why real transaction prices matter for Pokemon
Pokemon card prices are volatile and highly dependent on condition, set, and listing type. A PSA 10 Charizard Base Set sells for a fundamentally different price than a raw copy — and eBay listing prices for Best Offer cards are often 20–40% above the true accepted price.
The Card API captures the actual accepted Best Offer price on every eBay transaction — not the listing price. Combined with true auction hammer prices from Goldin and Heritage, you get real market data instead of inflated asking prices.
$850
eBay listing price
What you see
$620
Accepted Best Offer
True sale price
37%
Price inflation
Overstatement avoided
Search patterns for Pokemon cards
The q parameter supports full-text search across card titles as they appear in listings:
Charizard Base Set PSA 10Graded vintage Charizard comps
Pikachu IllustratorUltra-rare promo card sales
Lugia Neo Genesis BGS 9.5Graded Lugia from Neo Genesis
Charizard VMAX PSA 10Modern rainbow/alt art graded sales
1st Edition Base Set PSAAll graded 1st edition cards
Umbreon Gold Star BGSEX era gold star graded cards
Scarlet Violet Charizard ex PSARecent set graded cards
Pokemon booster box sealedSealed product sales
Code examples
Get recent PSA 10 Pokemon card sales and build a comp report:
import requests
import statistics
API_KEY = "tca_your_key_here"
BASE = "https://thecardapi.com/api/v1/market"
def pokemon_comps(card: str, grade: str = "PSA 10") -> dict:
"""Fetch recent sales and return comp statistics."""
r = requests.get(
f"{BASE}/sales",
params={"q": f"{card} {grade}", "limit": 100},
headers={"x-market-api-key": API_KEY},
)
r.raise_for_status()
sales = r.json()["data"]
prices = [s["sale_price"] for s in sales]
return {
"card": card,
"grade": grade,
"count": len(prices),
"median": statistics.median(prices) if prices else None,
"mean": statistics.mean(prices) if prices else None,
"low": min(prices) if prices else None,
"high": max(prices) if prices else None,
"by_platform": {
p: [s["sale_price"] for s in sales if s["platform"] == p]
for p in set(s["platform"] for s in sales)
},
}
comps = pokemon_comps("Charizard Base Set")
print(f"Median: ${comps['median']:,.0f} | Mean: ${comps['mean']:,.0f}")
print(f"Range: ${comps['low']:,.0f} – ${comps['high']:,.0f}")const API_KEY = "tca_your_key_here";
const BASE = "https://thecardapi.com/api/v1/market";
async function pokemonComps(card, grade = "PSA 10") {
const url = new URL(`${BASE}/sales`);
url.searchParams.set("q", `${card} ${grade}`);
url.searchParams.set("limit", 100);
const { data: sales } = await fetch(url, {
headers: { "x-market-api-key": API_KEY },
}).then((r) => r.json());
const prices = sales.map((s) => s.sale_price);
const sorted = [...prices].sort((a, b) => a - b);
const median = sorted[Math.floor(sorted.length / 2)] ?? null;
const mean = prices.length ? prices.reduce((a, b) => a + b, 0) / prices.length : null;
return {
card, grade,
count: prices.length,
median,
mean,
low: Math.min(...prices),
high: Math.max(...prices),
};
}
const comps = await pokemonComps("Charizard Base Set");
console.log(`Median: $${comps.median?.toFixed(0)} | Mean: $${comps.mean?.toFixed(0)}`);Platform coverage for Pokemon cards
| Platform | Pokemon volume | Notable for |
|---|---|---|
| eBay | Very high | High-volume raw and graded cards — auctions, BIN, Best Offer |
| Goldin | High | Ultra-rare and vintage graded Pokemon (Illustrator, 1st Ed Charizard PSA 10) |
| Heritage | Medium | Vintage Pokemon auction results with full lot descriptions |
| Alt | Medium | Graded modern Pokemon cards — PSA, BGS, CGC |
| Pristine | Low–Medium | Graded modern cards with Best Offer pricing |
Frequently asked questions
What Pokemon card data does the API provide?
Individual sale records including sale price, date, listing type (auction, fixed price, Best Offer), and platform. Search by card name, set, and grade to get comps for any Pokemon card.
Does the API include PSA graded Pokemon card prices?
Yes. Include the grade in your search query (e.g., 'Charizard Base Set PSA 10' or 'Lugia Neo Genesis BGS 9.5') to filter to graded card sales.
Which Pokemon sets are covered?
All sets that appear on the covered platforms — from Base Set and Jungle through modern Scarlet & Violet releases. Coverage is comprehensive for any set that actively sells on eBay and major auction houses.
Can I get historical Pokemon card price data?
Yes. Use date_from and date_to parameters to query historical windows. Free: 7-day lookback. Pro: 30 days. Enterprise: full history.
Is there a free API for Pokemon card prices?
Yes. Free tier: 10,000 sales/day, 7-day lookback, no credit card required. Sufficient for pricing tools, portfolio apps, and AI agent use cases.
How does this compare to TCGPlayer or other price guides?
TCGPlayer and similar guides show market price estimates. This API provides individual transaction records — the actual sale prices from each deal. You can calculate your own medians, means, and percentiles from real data.
Related resources
PSA Graded Card Prices
Graded card comps across all sports and TCGs
Sports Card Sales API
All sports cards — recent sales data
eBay Sold Card Prices API
eBay Best Offer and auction results
Card Price History API
Historical price trends by date range
Trading Card Market Data
Full market data overview and MCP server
Trading Card API
General-purpose card sales API
Get Pokemon card prices via API
Free tier: 10,000 sales/day, 7-day lookback, no credit card required. Real transaction prices from eBay, Goldin, Heritage, and more.
Get Free API Key →