Pokemon TCG API
The most comprehensive Pokemon card price API with daily updates, historical data, and PSA grading insights
// Fetch all cards in a set with one call
const response = await fetch(
'https://www.pokemonpricetracker.com/api/v2/cards?set=celebrations&fetchAllInSet=true',
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
const data = await response.json();
console.log(`Fetched ${data.data.length} cards`);
// Output: "Fetched 26 cards"
// Cost: 26 credits, but only counts as ~3 toward minute rate limitPokemon Card API Quick Start Guide
Get started with our free Pokemon TCG API in under 5 minutes - no credit card required
Free Pokemon API Access
Get instant access to our Pokemon card database API with no credit card required
Free Tier Includes
- ✓100 credits per day
- ✓Access to all 50,000+ cards
- ✓Up-to-date price data
- ✓3 days price history
- ✓No credit card required
Perfect For
- •Discord bots & hobby projects
- •Personal collection trackers
- •Learning & development
- •Proof of concepts
- •Small mobile apps
No Hidden Costs
- →Free forever for basic use
- →Transparent upgrade pricing
- →Pay only for what you use
- →Cancel anytime
- →No setup fees
Pokemon Database API Features
The most comprehensive Pokemon card database API with unique features not found anywhere else
Complete Card Database
Access every Pokemon card ever printed with our comprehensive database
- • 50,000+ unique cards
- • All sets from Base to current
- • Japanese exclusives included
- • Promo cards & special editions
Up-to-Date Pricing
Live market prices updated daily from multiple sources
- • TCGPlayer market prices
- • Multiple condition grades
- • 1st edition premiums
- • Foil & reverse foil prices
PSA Grading Data
Exclusive PSA pricing & sales data
- • PSA 8/9/10 market prices
- • eBay sales history
- • Sales velocity metrics
- • 7-day price trends
Price History Tracking
Historical data for trend analysis
- • Up to 12+ months history
- • Daily price snapshots
- • Volatility metrics
- • Trend indicators
Bulk Operations
Efficient bulk data fetching
- • fetchAllInSet endpoint
- • Batch card lookups
- • Optimized rate limits
- • Pagination support
Advanced Filtering
Powerful search capabilities
- • Filter by set, rarity, type
- • Price range queries
- • Multi-word natural language search
- • Sort by multiple fields
Pokemon Trading Card API Use Cases
See how developers are using our Pokemon cards API endpoint to build amazing applications
Discord Bots
Create Pokemon card lookup bots for Discord servers with up-to-date pricing
!price charizard base set- • Instant card lookups
- • Price alerts
- • Collection tracking
Collection Tracker Apps
Build mobile apps for tracking Pokemon card collections and portfolios
GET /api/v2/cards?search=charizard&limit=10- • Portfolio valuation
- • Want list tracking
- • Trade management
Market Analysis Tools
Develop investment analysis platforms for Pokemon card traders
includeHistory=true&days=30- • Price trend analysis
- • ROI calculations
- • Market predictions
Online Store Integration
Integrate up-to-date pricing into your Pokemon card marketplace
fetchAllInSet=true&set=crown- • Dynamic pricing
- • Inventory sync
- • Price matching
Pokemon API Comparison
See how PokemonPriceTracker compares to other Pokemon card APIs
| Feature | PokemonPriceTracker Our API | PokemonTCG.io | TCGPlayer API |
|---|---|---|---|
| Free Tier Available | ✓ 100 credits/day | ✓ 250 calls/hour | ✗ Application required |
| Up-to-Date Prices | ✓ Daily updates | ✗ No pricing | ✓ Daily updates |
| PSA Grading Data | ✓ PSA, CGC, BGS, SGC | ✗ | ✗ |
| Price History | ✓ 3 days to 12+ months (plan-dependent) | ✗ | Limited Requires higher tier |
| eBay Sales Data | ✓ Graded cards | ✗ | ✗ |
| Best For | Price-focused apps Investment tools, marketplaces | Card data only Pokedex apps | Enterprise Large businesses |
Why Choose PokemonPriceTracker API?
Transparent Pricing
Simple credit-based pricing. Each API call consumes credits based on the data you request.
How Credits Work
- 1 creditBasic card data
- +1 creditAdd price history
- +1 creditAdd PSA/eBay data
- • 10 cards (basic) = 10 credits
- • 10 cards + history = 20 credits
- • 10 cards + all data = 30 credits
- • Entire set (26 cards) = 26 credits
fetchAllInSet=truelets you fetch entire sets efficiently. Uses credits per card but only counts as 1-30 calls toward minute limit.
Feature Comparison
| Feature | Free | API | Business |
|---|---|---|---|
Basic card data | 1 credit/card | 1 credit/card | 1 credit/card |
Recent price history | +1 credit/card | +1 credit/card | +1 credit/card |
eBay graded data (PSA, CGC, BGS, SGC) | +1 credit/card | +1 credit/card | +1 credit/card |
eBay sold listings (auction/BIN details) | |||
Cardmarket EUR prices (Beta) | +1 credit/card | +1 credit/card | |
History window | 3 days | 6 months | Unlimited |
Population reports (GemRate) | 2 credits/card | ||
Daily bulk CSV export | 2 downloads/day | ||
Bulk fetching (fetchAllInSet) | |||
API keys | 1 key | Up to 5 keys | Unlimited |
PSA Analysis features | |||
Support | Community | Email (24h) | Priority |
Commercial use | |||
Custom rate limits | Available |
Track Your Usage
Every API response includes headers showing your consumption:
Why Choose Our Pokemon API?
Built for developers who need reliable, comprehensive Pokemon card data with enterprise-grade performance
Lightning Fast
Sub-50ms response times with global CDN distribution
50,000+ Cards
Complete database with comprehensive English and Japanese Pokemon card coverage
Recent Price History
Track recent price trends with daily snapshots
Multi-Grader Data
PSA, CGC, BGS, SGC graded prices and sales history from eBay
Bulk Fetching
Fetch entire sets in one call with optimized rate limiting
RESTful API
Standard REST endpoints with JSON responses
Simple Integration
// Fetch cards with just 3 lines
const res = await fetch('/api/v2/cards?set=temporal', {
headers: { 'Authorization': 'Bearer KEY' }
});
const cards = await res.json();Rich Data Response
{
"name": "Charizard ex",
"prices": { "market": 125.50 },
"priceHistory": { /* 90 days */ },
"ebay": { "psa10": { "avg": 450 } }
}Perfect For Building
Pokemon TCG API Endpoints
Powerful Pokemon API endpoints: access 50,000+ cards with up-to-date pricing, sealed products, browse sets, parse eBay titles, plus grading population data and bulk CSV exports for Business plans
/api/v2/setsRetrieve all Pokemon TCG sets with filtering and sorting
Get all sets:
GET /api/v2/setsSearch for Scarlet & Violet sets:
GET /api/v2/sets?search=scarletGet newest sets first:
GET /api/v2/sets?sortBy=releaseDate&sortOrder=desc&limit=10Get Japanese sets:
GET /api/v2/sets?language=japanese/api/v2/cardsQuery Pokemon cards with advanced filtering, sorting, and optional historical data
Get cards from a specific set:
GET /api/v2/cards?set=Black Bolt&limit=10Search for Charizard cards with prices over $100:
GET /api/v2/cards?search=Charizard&minPrice=100&sortBy=price&sortOrder=descGet a specific card with all data:
GET /api/v2/cards?tcgPlayerId=490294&includeBoth=trueGet last 7 days of price history automatically:
GET /api/v2/cards?tcgPlayerId=490294&includeHistory=true&days=7Get 90 days of eBay PSA data (defaults to 30):
GET /api/v2/cards?tcgPlayerId=490294&includeEbay=true&days=90Get high-granularity price data (730 data points, 2 years):
GET /api/v2/cards?tcgPlayerId=490294&includeHistory=true&days=730&maxDataPoints=730⚠️ Premium pricing: +1 credit per card (3 total with includeHistory) when maxDataPoints > 365 — Business plan only
Japanese Cards Support
Access Japanese Pokemon cards with the language parameter:
GET /api/v2/cards?language=japanese&search=Pikachu&limit=10• Use language=japanese to get Japanese cards
• Omit language parameter or use language=english for English cards (default)
• Japanese cards include pricing, images, and metadata in Japanese
• All other parameters work the same way for Japanese cards
Bulk Fetching with fetchAllInSet
Fetch entire sets efficiently in a single call:
GET /api/v2/cards?set=celebrations&fetchAllInSet=true• Fetches ALL cards in the set (up to limit based on data types)
• Costs: 1 credit per card in the set from your daily allowance
• Rate limit: Uses Math.ceil(cards / 10) minute calls, capped at 30
• Examples: 26 cards = 3 minute calls | 100 cards = 10 minute calls | 350 cards = 30 minute calls (capped)
/api/v2/sealed-productsRetrieve sealed Pokemon TCG products with up-to-date prices and recent sales data
Get a specific product by tcgPlayerId:
GET /api/v2/sealed-products?tcgPlayerId=624679Search for booster boxes:
GET /api/v2/sealed-products?search=booster+boxGet products from a specific set:
GET /api/v2/sealed-products?set=sv08-surging-sparksGet products with 90 days of price history:
GET /api/v2/sealed-products?set=surging-sparks&includeHistory=true&days=90Get Japanese sealed products (at least one filter is required):
GET /api/v2/sealed-products?language=japanese&search=booster&limit=20/api/v2/parse-titleNEWParse eBay-style titles to extract Pokemon card data and find matching cards in database
Parse a PSA graded card title:
curl -X POST /api/v2/parse-title \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "2022 POKEMON JPN SWORD & SHIELD DARK PHANTASMA #073 FULL ART/PIKACHU PSA 10"}'Parse with fuzzy matching options:
curl -X POST /api/v2/parse-title \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "1999 Pokemon Base Set Charizard #4/102 PSA 10 GEM MINT",
"options": {
"fuzzyMatching": true,
"maxSuggestions": 3,
"includeConfidence": true
}
}'JavaScript example:
const response = await fetch('https://www.pokemonpricetracker.com/api/v2/parse-title', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: "BGS 9.5 2023 Pokemon Paradox Rift Roaring Moon ex #251",
options: { fuzzyMatching: true }
})
});
const { data } = await response.json();
console.log('Parsed:', data.parsed);
console.log('Matches:', data.matches);Population (GemRate) Endpoint
Retrieve grading population data from GemRate for Pokemon cards. Includes PSA, BGS, SGC, and CGC grade counts, gem rates, and population statistics.
⚠️ Business/Enterprise Plan Required
This endpoint is only available to Business and Enterprise plan subscribers. Free and API plan users will receive a 403 Forbidden response.Upgrade your plan to access population data.
Population Data (Premium)
This endpoint provides population report data from GemRate, including grade distributions for PSA, BGS, CGC, and SGC. Useful for grading ROI calculations and market scarcity assessment.
Endpoint
GET /api/v2/populationQuery Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| Card Selection | |||
tcgPlayerId | string | Get population data for a specific card by TCGPlayer ID. Returns single object instead of array. | - |
tcgPlayerIds | string | Comma-separated TCGPlayer IDs for bulk queries (max 50) | - |
language | string | Filter by card language: english or japanese | english |
| Filtering Parameters | |||
minPopulation | integer | Filter by minimum total population across all graders | - |
grader | string | Filter by grading company having data: PSA, BGS, CGC, or SGC | - |
minGemRate | number | Filter by minimum combined gem rate percentage (0-100) | - |
| Pagination | |||
limit | integer | Maximum results per page (1-100) | 20 |
offset | integer | Number of results to skip for pagination | 0 |
Rate Limiting
Credit Cost: 2 API credits per card (premium data)
Max Limits:
- 100 cards per request maximum
- 50 IDs maximum for bulk queries (tcgPlayerIds)
Grader-Specific Fields
Each grading company has different grade scales and special designations:
PSA
g1-g10: Whole gradesauth: Authentic/Altered cardsqualifiers: MK, OC, ST, PD qualifiers
BGS
g1-g10: Whole gradesg1_5-g9_5: Half gradespristine: BGS 10 Pristineperfect: BGS 10 Black Label
CGC
g1-g10: Whole gradesg1_5-g9_5: Half grades
SGC
g1-g10: Whole grades
Example Requests
Get population data for a specific card:
GET /api/v2/population?tcgPlayerId=490294Bulk query multiple cards:
GET /api/v2/population?tcgPlayerIds=490294,490295,490296Filter by minimum gem rate:
GET /api/v2/population?minGemRate=15&limit=50Filter by grading company:
GET /api/v2/population?grader=PSA&minPopulation=1000Get Japanese card population data:
GET /api/v2/population?tcgPlayerId=490294&language=japaneseResponse Format
{
"data": {
"tcgPlayerId": "490294",
"populationByGrader": {
"PSA": {
"g8": 1500,
"g9": 8000,
"g10": 2500,
"auth": 50,
"qualifiers": 25,
"totalPopulation": 12075,
"gemRate": 20.70
},
"BGS": {
"g8": 200,
"g9": 1000,
"g9_5": 500,
"g10": 100,
"pristine": 25,
"perfect": 5,
"totalPopulation": 1830,
"gemRate": 7.10
},
"CGC": {
"g9": 400,
"g9_5": 200,
"g10": 50,
"totalPopulation": 650,
"gemRate": 7.69
},
"SGC": {
"g9": 100,
"g10": 30,
"totalPopulation": 130,
"gemRate": 23.08
}
},
"totalPopulation": 14685,
"totalGems": 2710,
"combinedGemRate": 18.45,
"gradersTracked": ["PSA", "BGS", "CGC", "SGC"],
"combinedTotals": {
"g8": 1700,
"g9": 9500,
"g10": 2685
},
"percentHigher": {
"g8": 45.2,
"g9": 19.3,
"g10": 0
},
"matchConfidence": "high",
"matchScore": 0.98,
"lastFetchedDate": "2024-01-15T12:00:00Z",
"updatedAt": "2024-01-15T12:00:00Z"
},
"metadata": {
"total": 1,
"count": 1,
"limit": 1,
"offset": 0,
"hasMore": false,
"language": "english",
"apiCallsConsumed": {
"total": 2,
"breakdown": {
"cards": 1,
"population": 1
},
"costPerCard": 2
}
}
}Response Fields
| Field | Description |
|---|---|
populationByGrader | Grade breakdown by each grading company (PSA, BGS, CGC, SGC) |
totalPopulation | Total graded cards across all companies |
totalGems | Total 10s (including pristine/perfect) across all companies |
combinedGemRate | Combined gem rate percentage (0-100) across all graders |
gradersTracked | List of grading companies with data for this card |
combinedTotals | Combined grade totals across all graders |
percentHigher | Percentage of cards graded higher than each grade (useful for ROI calculations) |
matchConfidence | Card match confidence: "high", "medium", or "low" |
matchScore | Match score (0-1) indicating how closely the card matched in GemRate |
Response Headers
| Header | Description |
|---|---|
X-Response-Time | Response time in milliseconds |
X-RateLimit-Cost | Total API credits consumed by this request |
X-RateLimit-Daily-Remaining | Remaining daily API credits |
X-RateLimit-Minute-Remaining | Remaining per-minute calls |
Error Responses
400 Bad Request
Invalid parameters (e.g., invalid language, too many IDs)
401 Unauthorized
Invalid or missing API key
429 Too Many Requests
Rate limit exceeded or insufficient API credits
500 Internal Server Error
Server error while fetching population data
Use Cases
- Grading ROI Calculations: Use gem rates and percentHigher to estimate returns on grading investments
- Market Scarcity Assessment: Low population + high gem rate = rare high-grade copies
- Investment Research: Compare population across grading companies for arbitrage opportunities
- Portfolio Analysis: Track population changes over time for your collection
- BGS vs PSA Analysis: Compare pristine/perfect rates vs PSA 10 rates
Integration Notes
- Population data is sourced from GemRate and updated periodically
- Not all cards have population data - check
gradersTrackedarray for available graders - Use
matchConfidenceto assess data reliability - "high" confidence indicates strong card identification - The
percentHigherfield shows what percentage of cards graded higher than each grade, useful for ROI calculations - BGS has special grades:
pristine(BGS 10 Pristine) andperfect(BGS 10 Black Label) - Half grades (
g9_5, etc.) are only available for BGS and CGC
Price Dump Export Endpoint
Download a daily snapshot of all card prices, sealed product prices, eBay graded sales, or grading population data as a gzip-compressed CSV file. Designed for Business subscribers who need bulk data without burning through per-card API credits.
⚠️ Business Plan Required
This endpoint is only available to Business plan subscribers. Free and API plan users will receive a 403 Forbidden response. Upgrade your plan to access price dump exports.
No API Credits Consumed
Downloads are tracked via a separate quota of 2 downloads per day — they do not consume your daily API credit balance. Quota resets at UTC midnight.
Endpoint
GET /api/v2/exportParameters
| Parameter | Type | Default | Description |
|---|---|---|---|
type | string | cards | Dataset to download: cards, sealed, ebay, or population |
CSV Columns by Type
cards
tcgPlayerId, name, setName, setId, cardNumber, rarity, language, printing, marketPrice, lowPrice, sellers, lastPriceUpdatesealed
tcgPlayerId, name, setName, setId, productType, language, marketPrice, lowPrice, sellers, lastPriceUpdateebay
tcgPlayerId, grade, salesCount, averagePrice, medianPrice, smartMarketPrice, smartMarketConfidence, marketPrice7Day, marketTrend, salesVelocityWeeklypopulation
tcgPlayerId, grader, totalPopulation, gemRate, g1, g2, g3, g4, g5, g6, g7, g8, g9, g9_5, g10, auth, qualifiers, pristine, perfect, matchConfidenceResponse
Returns 302 Found redirecting to a gzip-compressed CSV file on Vercel Blob. The file is regenerated daily at 6:00 AM UTC. Download it directly from the Location header URL.
| Header | Description |
|---|---|
Location | Direct URL to the .csv.gz file |
X-Export-Downloads-Remaining | Downloads left today (max 2/day) |
X-Export-Reset-At | ISO 8601 timestamp when quota resets (UTC midnight) |
X-Dump-Generated-At | ISO 8601 timestamp when the dump was generated |
Error Responses
| Status | Meaning |
|---|---|
403 | Business plan required |
429 | Daily download limit reached (2/day). Check Retry-After header. |
503 | Dump not yet available — generated at 6:00 AM UTC daily. Try again later. |
Examples
Download today's card price snapshot:
curl -L -H "Authorization: Bearer YOUR_API_KEY" \
"https://www.pokemonpricetracker.com/api/v2/export?type=cards" \
-o cards-latest.csv.gzDownload population data:
curl -L -H "Authorization: Bearer YOUR_API_KEY" \
"https://www.pokemonpricetracker.com/api/v2/export?type=population" \
-o population-latest.csv.gzBest Practices
- Download once per day, not per request. The dump only changes once daily (regenerated at 6:00 AM UTC). Pull it after 6:00 AM UTC, cache it on your side, and serve all your reads from your own copy. You have 2 downloads/day — treat the second as a retry, not a polling loop.
- Use export for full-catalog syncs, the
/cardsendpoint for lookups. If you need the whole catalog (50,000+ cards) the export is one request instead of thousands of paginated calls and burns zero API credits. For looking up a handful of specific cards or live single-card prices, the regular endpoints are better. - Follow the redirect. The endpoint returns
302to a Vercel Blob URL — make sure your HTTP client follows redirects (curl -L,axiosdefault,fetchdefault). Don't cache or hardcode the blob URL; it changes each day. - Decompress the gzip stream. Files are served as
.csv.gz. Pipe throughgunzip(curl -L ... | gunzip > cards.csv) or decompress in code before parsing. All files are UTF-8 with a header row and RFC 4180 quoting. - Join the four datasets on
tcgPlayerId. Every dataset sharestcgPlayerIdas the key. Downloadcards,ebay, andpopulationseparately and join them locally to build a complete per-card record. - Handle
503gracefully. Before 6:00 AM UTC the new dump may not exist yet. On503, respect theRetry-Afterheader (defaults to 1 hour) rather than retrying immediately — this does not count against your daily download quota. - Check the freshness headers. Use
X-Dump-Generated-Atto confirm you got today's data, andX-Export-Downloads-Remainingto track your quota before scheduling the next pull.
Pokemon API Code Examples
Start using our Pokemon cards API endpoint in your favorite programming language
JavaScript/TypeScript
// Fetch Pokemon cards with axios
const axios = require('axios');
const response = await axios.get(
'https://www.pokemonpricetracker.com/api/v2/cards',
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
},
params: {
set: 'temporal',
limit: 10,
includeHistory: true
}
}
);
console.log(response.data);Python
# Pokemon API Python example
import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
params = {
'set': 'temporal',
'limit': 10,
'includeHistory': 'true'
}
response = requests.get(
'https://www.pokemonpricetracker.com/api/v2/cards',
headers=headers,
params=params
)
print(response.json())Resources & Support
Documentation
Detailed guides and tutorials for all API features
SDKs & Libraries
Community-built libraries for popular languages
Ready to Get Started?
Join thousands of developers building with the most comprehensive Pokemon card API