PokeTrace API Developer Guide
The PokeTrace API provides real-time pricing data for over 60,000+ Pokemon cards. This guide covers everything you need to integrate the API into your application: authentication, endpoints, response formats, error handling, and production best practices.

Access PSA, BGS, and CGC graded prices alongside raw card values from TCGPlayer, eBay, and CardMarket.
Quick Start
Get up and running in three steps: (1) Create an account at poketrace.com/dashboard, (2) Generate an API key, (3) Add the X-API-Key header to your requests. That's it—you're ready to query card data.
The base URL for all API requests is https://api.poketrace.com/v1. All endpoints require authentication via the X-API-Key header. The API returns JSON responses with consistent structure across all endpoints.
Check API status at status.poketrace.com. For WebSocket real-time updates (Scale plan only), connect to wss://api.poketrace.com/ws with your API key.
Authentication
All API requests require an API key passed in the X-API-Key header. Keys are free to create and rate limits are enforced per account, not per key—create multiple keys for different projects without splitting your quota.
Steps
- 1.Sign up at poketrace.com/dashboard
- 2.Click 'Create' to generate a new API key
- 3.Copy your key (format: pc_xxxxxxxx)
- 4.Include X-API-Key: YOUR_KEY in request headers
curl -H "X-API-Key: pc_your_key" https://api.poketrace.com/v1/cards
fetch('https://api.poketrace.com/v1/cards', {
headers: { 'X-API-Key': 'pc_your_key' }
})API Endpoints
The API provides four core endpoints. Cards are separated by market—US cards have TCGPlayer and eBay data, EU cards have CardMarket data.
GET /v1/cards
List cards with pagination and filters. Returns basic card info with nested prices by source and tier.
Params: limit (max 20), cursor, set, search, card_number, variant, market (US/EU), has_graded, tcgplayer_ids, cardmarket_ids
GET /v1/cards?market=US&set=base-set&limit=20{
"data": [{
"id": "019bff77-befa-771d-bab0-f5909f0a78c9",
"name": "Charizard",
"cardNumber": "4/102",
"set": { "slug": "base-set", "name": "Base Set" },
"variant": "Holofoil",
"rarity": "Rare Holo",
"market": "US",
"currency": "USD",
"prices": {
"ebay": {
"NEAR_MINT": { "avg": 890, "low": 750, "high": 1050, "saleCount": 156 }
},
"tcgplayer": {
"NEAR_MINT": { "avg": 420, "low": 380, "high": 480, "saleCount": 89 }
}
}
}],
"pagination": { "hasMore": true, "nextCursor": "YnNfNQ==", "count": 1 }
}GET /v1/cards/:id
Get full card details with pricing by source and tier. US cards include ebay (all tiers) + tcgplayer (raw only). EU cards include cardmarket (Price Trend with historical averages) + cardmarket_unsold (active listings with tier/country breakdown).
GET /v1/cards/019bff77-befa-771d-bab0-f5909f0a78c9// US Card
{
"data": {
"id": "019bff77-befa-771d-bab0-f5909f0a78c9",
"name": "Charizard",
"market": "US",
"currency": "USD",
"prices": {
"ebay": {
"PSA_10": { "avg": 5200, "low": 4800, "high": 5600, "saleCount": 47 },
"NEAR_MINT": { "avg": 890, "low": 750, "high": 1050, "saleCount": 156 }
},
"tcgplayer": {
"NEAR_MINT": { "avg": 420, "low": 380, "high": 480, "saleCount": 89 }
}
}
}
}
// EU Card
{
"data": {
"id": "eu_273550",
"name": "Charizard",
"market": "EU",
"currency": "EUR",
"prices": {
"cardmarket": { "avg": 385, "avg1d": 380, "avg7d": 375, "avg30d": 370 },
"cardmarket_unsold": {
"NEAR_MINT": { "avg": 420, "low": 350, "high": 890, "saleCount": 125, "country": { "DE": { "avg": 410 }, "FR": { "avg": 450 } } }
}
}
}
}GET /v1/sets
List all card sets with metadata. Use set slugs to filter cards.
Params: search, game (pokemon, pokemon-japanese), limit, cursor
GET /v1/sets?search=base&limit=5{
"data": [
{ "slug": "base-set", "name": "Base Set", "releaseDate": "1999-01-09", "cardCount": 102 },
{ "slug": "base-set-2", "name": "Base Set 2", "releaseDate": "2000-02-24", "cardCount": 130 }
],
"pagination": { "hasMore": true, "nextCursor": "YmFzZS1zZXQtMg==", "count": 2 }
}GET /v1/auth/info
Get your API key info and usage stats. Check remaining requests, reset time, and plan details.
GET /v1/auth/info{
"data": {
"key": "pc_a1b2c3d4...",
"name": "Production",
"active": true,
"createdAt": "2026-01-17T10:00:00Z",
"lastUsedAt": "2026-01-17T12:30:00Z",
"user": {
"plan": "Free",
"remaining": 208,
"limit": 250,
"resetsAt": "2026-01-18T00:00:00Z"
}
}
}GET /v1/cards/:id/prices/:tier/history
Get historical price data for a specific tier. Useful for charts and trend analysis.
Params: period (7d, 30d, 90d, 1y, all), limit, cursor
GET /v1/cards/019bff77.../prices/PSA_10/history?period=30d{
"data": [
{ "date": "2026-01-27", "source": "ebay", "avg": 5200, "low": 4800, "high": 5600, "saleCount": 3 },
{ "date": "2026-01-26", "source": "ebay", "avg": 5150, "low": 4750, "high": 5500, "saleCount": 5 }
],
"pagination": { "hasMore": true, "nextCursor": "MjAyNi0wMS0yNQ==", "count": 2 }
}Rate Limits
Rate limits are enforced per account, not per key. Burst limits are per API key and plan-based: Free 1/2s, Pro 30/10s, Scale 60/10s. Daily limits reset at midnight UTC. Every response includes headers showing your current usage.
Free
250 / day
US only (eBay, TCGPlayer)
Raw conditions only
Pro
10,000 / day
US (eBay, TCGPlayer) + EU (Cardmarket)
Raw + Graded (PSA, BGS, CGC)
Scale
100,000 / day
US (eBay, TCGPlayer) + EU (Cardmarket)
Raw + Graded + WebSocket
Response Headers
- X-RateLimit-Limit — Your plan's daily request limit
- X-RateLimit-Remaining — Daily requests remaining
- X-RateLimit-Reset — ISO8601 timestamp when daily limit resets
- X-Plan — Your current plan (Free, Pro, Scale)
Complete Code Examples
Copy-paste these examples to get started. Replace YOUR_KEY with your actual API key.
JavaScript / Node.js
const API_KEY = process.env.POKETRACE_API_KEY;
const BASE_URL = 'https://api.poketrace.com/v1';
async function getCard(cardId) {
const response = await fetch(`${BASE_URL}/cards/${cardId}`, {
headers: { 'X-API-Key': API_KEY }
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message);
}
return response.json();
}
async function searchCards(query, market = 'US') {
const params = new URLSearchParams({ search: query, market, limit: '20' });
const response = await fetch(`${BASE_URL}/cards?${params}`, {
headers: { 'X-API-Key': API_KEY }
});
return response.json();
}
// Usage
const card = await getCard('019bff77-befa-771d-bab0-f5909f0a78c9');
console.log(`${card.data.name}: $${card.data.prices.ebay.PSA_10.avg} (PSA 10)`);Python
cURL
# Get a single card curl -H "X-API-Key: YOUR_KEY" \ "https://api.poketrace.com/v1/cards/019bff77-befa-771d-bab0-f5909f0a78c9" # Search for cards curl -H "X-API-Key: YOUR_KEY" \ "https://api.poketrace.com/v1/cards?search=charizard&market=US&limit=10" # List all sets curl -H "X-API-Key: YOUR_KEY" \ "https://api.poketrace.com/v1/sets?limit=50" # Check your usage curl -H "X-API-Key: YOUR_KEY" \ "https://api.poketrace.com/v1/auth/info" # Get price history curl -H "X-API-Key: YOUR_KEY" \ "https://api.poketrace.com/v1/cards/019bff77.../prices/PSA_10/history?period=30d"
Error Handling
The API uses standard HTTP status codes. All error responses include error and message fields.
Bad Request
Invalid parameters
{ "error": "Invalid limit parameter", "message": "Limit must be between 1 and 20" }Unauthorized
Missing or invalid API key
{ "error": "API key required", "message": "Include your API key in the X-API-Key header" }Forbidden
Plan upgrade required
{ "error": "Pro plan required", "message": "Graded card prices require a Pro plan.", "code": "UPGRADE_REQUIRED" }Not Found
Resource doesn't exist
{ "error": "Card not found", "message": "No card exists with this ID" }Rate Limited
Too many requests
{ "error": "Rate limit exceeded", "message": "Daily limit reached. Resets at 2026-01-18T00:00:00Z", "retryAfter": 3600 }Frequently Asked Questions
What's the difference between US and EU cards?
Cards are market-specific. US cards have TCGPlayer and eBay pricing in USD. EU cards have CardMarket pricing in EUR with per-country breakdowns (DE, FR, IT, etc.). Each card belongs to one market only.
Which grading companies are supported?
We support 15 grading companies including PSA, BGS, CGC, ACE, TAG, and more. Graded prices are available on Pro and Scale plans. The gradedOptions field on each card shows available grades.
How do I get real-time price updates?
WebSocket connections are available on the Scale plan. Connect to wss://api.poketrace.com/ws with your API key. Subscribe to specific cards to receive instant price updates when new sales occur.
Can I use the API for commercial projects?
Yes. Free tier allows non-commercial use. Pro and Scale plans include commercial licenses. Check our terms of service for full details.
How accurate is the pricing data?
Prices are based on verified completed sales from TCGPlayer, eBay, and CardMarket. We update every few hours. Each price tier includes a confidence score (high, medium, low) and saleCount so you can assess reliability.
Start Building Today
Get your free API key and start building Pokemon card applications. 250 requests per day, no credit card required.
Get Free API Key→