Skip to main content
🚀 Version 2.0 - Bulk Fetching Available

Pokemon TCG API

The most comprehensive Pokemon card price API with daily updates, historical data, and PSA grading insights

0+
Pokemon Cards
0.0M+
API Calls/Month
24hr
Update Cycle
Lightning Fast
<50ms response
50k+ Cards
Complete database
Recent Prices
Daily updates
Graded Data
PSA, CGC, BGS+
99.9% Uptime
Reliable service
Bulk Fetching
Entire sets at once
Quick Example
// 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 limit

Pokemon Card API Quick Start Guide

Get started with our free Pokemon TCG API in under 5 minutes - no credit card required

1

Get Your API Key

Sign up for a free account and generate your API key instantly

2

Make Your First Call

Try this simple endpoint to list all available sets

GET /api/v2/sets
3

Build Amazing Apps

Access 50,000+ cards with prices, recent history, and PSA data

Free Pokemon API Access

START FREE

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

No credit card • Setup in 30 seconds • Full documentation included

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

Popular

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
Mobile

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
Analytics

Market Analysis Tools

Develop investment analysis platforms for Pokemon card traders

includeHistory=true&days=30
  • • Price trend analysis
  • • ROI calculations
  • • Market predictions
E-Commerce

Online Store Integration

Integrate up-to-date pricing into your Pokemon card marketplace

fetchAllInSet=true&set=crown
  • • Dynamic pricing
  • • Inventory sync
  • • Price matching

Ready to Build?

Start building your Pokemon card application today with our free tier

Pokemon API Comparison

See how PokemonPriceTracker compares to other Pokemon card APIs

Feature
PokemonPriceTracker
Our API
PokemonTCG.ioTCGPlayer 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?

Only API with multi-grader data (PSA, CGC, BGS, SGC)
Up-to-date prices included free
Most comprehensive price history
eBay sales data for investments
Transparent, usage-based pricing
Start free, scale as you grow

Transparent Pricing

Simple credit-based pricing. Each API call consumes credits based on the data you request.

How Credits Work

Per Card Costs:
  • 1 credit
    Basic card data
  • +1 credit
    Add price history
  • +1 credit
    Add PSA/eBay data
Example Queries:
  • • 10 cards (basic) = 10 credits
  • • 10 cards + history = 20 credits
  • • 10 cards + all data = 30 credits
  • • Entire set (26 cards) = 26 credits
Bulk Fetching:

fetchAllInSet=truelets you fetch entire sets efficiently. Uses credits per card but only counts as 1-30 calls toward minute limit.

Free

$0/month
100
credits/day
60 calls/minute
Most Popular

API

$9.99/month
or $99.99/year
20,000
credits/day
60 calls/minute
Commercial Use

Business

$99/month
or $999/year
200,000
credits/day
500 calls/minute

Feature Comparison

FeatureFreeAPIBusiness
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:

X-API-Calls-Consumed: 150
X-API-Calls-Breakdown: cards=50,history=50,ebay=50
X-RateLimit-Daily-Remaining: 19850

Why Choose Our Pokemon API?

Built for developers who need reliable, comprehensive Pokemon card data with enterprise-grade performance

Performance

Lightning Fast

Sub-50ms response times with global CDN distribution

Coverage

50,000+ Cards

Complete database with comprehensive English and Japanese Pokemon card coverage

Analytics

Recent Price History

Track recent price trends with daily snapshots

Premium

Multi-Grader Data

PSA, CGC, BGS, SGC graded prices and sales history from eBay

New

Bulk Fetching

Fetch entire sets in one call with optimized rate limiting

Developer Friendly

RESTful API

Standard REST endpoints with JSON responses

10M+/month
API Calls
99.9%
Uptime
<50ms
Response Time
24hr
Daily Updates

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

Collection Trackers
Price Alert Systems
Market Analytics Tools
Trading Platforms
Portfolio Managers
Mobile Apps
Discord Bots
Investment Tools

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

GET/api/v2/sets

Retrieve all Pokemon TCG sets with filtering and sorting

Get all sets:

GET /api/v2/sets

Search for Scarlet & Violet sets:

GET /api/v2/sets?search=scarlet

Get newest sets first:

GET /api/v2/sets?sortBy=releaseDate&sortOrder=desc&limit=10

Get Japanese sets:

GET /api/v2/sets?language=japanese
GET/api/v2/cards

Query Pokemon cards with advanced filtering, sorting, and optional historical data

Get cards from a specific set:

GET /api/v2/cards?set=Black Bolt&limit=10

Search for Charizard cards with prices over $100:

GET /api/v2/cards?search=Charizard&minPrice=100&sortBy=price&sortOrder=desc

Get a specific card with all data:

GET /api/v2/cards?tcgPlayerId=490294&includeBoth=true

Get last 7 days of price history automatically:

GET /api/v2/cards?tcgPlayerId=490294&includeHistory=true&days=7

Get 90 days of eBay PSA data (defaults to 30):

GET /api/v2/cards?tcgPlayerId=490294&includeEbay=true&days=90

Get 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)

GET/api/v2/sealed-products

Retrieve 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=624679

Search for booster boxes:

GET /api/v2/sealed-products?search=booster+box

Get products from a specific set:

GET /api/v2/sealed-products?set=sv08-surging-sparks

Get products with 90 days of price history:

GET /api/v2/sealed-products?set=surging-sparks&includeHistory=true&days=90

Get Japanese sealed products (at least one filter is required):

GET /api/v2/sealed-products?language=japanese&search=booster&limit=20
POST/api/v2/parse-titleNEW

Parse 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/population

Query Parameters

ParameterTypeDescriptionDefault
Card Selection
tcgPlayerIdstringGet population data for a specific card by TCGPlayer ID. Returns single object instead of array.-
tcgPlayerIdsstringComma-separated TCGPlayer IDs for bulk queries (max 50)-
languagestringFilter by card language: english or japaneseenglish
Filtering Parameters
minPopulationintegerFilter by minimum total population across all graders-
graderstringFilter by grading company having data: PSA, BGS, CGC, or SGC-
minGemRatenumberFilter by minimum combined gem rate percentage (0-100)-
Pagination
limitintegerMaximum results per page (1-100)20
offsetintegerNumber of results to skip for pagination0

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 grades
  • auth: Authentic/Altered cards
  • qualifiers: MK, OC, ST, PD qualifiers

BGS

  • g1-g10: Whole grades
  • g1_5-g9_5: Half grades
  • pristine: BGS 10 Pristine
  • perfect: BGS 10 Black Label

CGC

  • g1-g10: Whole grades
  • g1_5-g9_5: Half grades

SGC

  • g1-g10: Whole grades

Example Requests

Get population data for a specific card:

GET /api/v2/population?tcgPlayerId=490294

Bulk query multiple cards:

GET /api/v2/population?tcgPlayerIds=490294,490295,490296

Filter by minimum gem rate:

GET /api/v2/population?minGemRate=15&limit=50

Filter by grading company:

GET /api/v2/population?grader=PSA&minPopulation=1000

Get Japanese card population data:

GET /api/v2/population?tcgPlayerId=490294&language=japanese

Response 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

FieldDescription
populationByGraderGrade breakdown by each grading company (PSA, BGS, CGC, SGC)
totalPopulationTotal graded cards across all companies
totalGemsTotal 10s (including pristine/perfect) across all companies
combinedGemRateCombined gem rate percentage (0-100) across all graders
gradersTrackedList of grading companies with data for this card
combinedTotalsCombined grade totals across all graders
percentHigherPercentage of cards graded higher than each grade (useful for ROI calculations)
matchConfidenceCard match confidence: "high", "medium", or "low"
matchScoreMatch score (0-1) indicating how closely the card matched in GemRate

Response Headers

HeaderDescription
X-Response-TimeResponse time in milliseconds
X-RateLimit-CostTotal API credits consumed by this request
X-RateLimit-Daily-RemainingRemaining daily API credits
X-RateLimit-Minute-RemainingRemaining 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 gradersTracked array for available graders
  • Use matchConfidence to assess data reliability - "high" confidence indicates strong card identification
  • The percentHigher field shows what percentage of cards graded higher than each grade, useful for ROI calculations
  • BGS has special grades: pristine (BGS 10 Pristine) and perfect (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/export

Parameters

ParameterTypeDefaultDescription
typestringcardsDataset to download: cards, sealed, ebay, or population

CSV Columns by Type

cards

tcgPlayerId, name, setName, setId, cardNumber, rarity, language, printing, marketPrice, lowPrice, sellers, lastPriceUpdate

sealed

tcgPlayerId, name, setName, setId, productType, language, marketPrice, lowPrice, sellers, lastPriceUpdate

ebay

tcgPlayerId, grade, salesCount, averagePrice, medianPrice, smartMarketPrice, smartMarketConfidence, marketPrice7Day, marketTrend, salesVelocityWeekly

population

tcgPlayerId, grader, totalPopulation, gemRate, g1, g2, g3, g4, g5, g6, g7, g8, g9, g9_5, g10, auth, qualifiers, pristine, perfect, matchConfidence

Response

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.

HeaderDescription
LocationDirect URL to the .csv.gz file
X-Export-Downloads-RemainingDownloads left today (max 2/day)
X-Export-Reset-AtISO 8601 timestamp when quota resets (UTC midnight)
X-Dump-Generated-AtISO 8601 timestamp when the dump was generated

Error Responses

StatusMeaning
403Business plan required
429Daily download limit reached (2/day). Check Retry-After header.
503Dump 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.gz

Download population data:

curl -L -H "Authorization: Bearer YOUR_API_KEY" \
  "https://www.pokemonpricetracker.com/api/v2/export?type=population" \
  -o population-latest.csv.gz

Best 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 /cards endpoint 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 302 to a Vercel Blob URL — make sure your HTTP client follows redirects (curl -L, axios default, fetch default). Don't cache or hardcode the blob URL; it changes each day.
  • Decompress the gzip stream. Files are served as .csv.gz. Pipe through gunzip (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 shares tcgPlayerId as the key. Download cards, ebay, and population separately and join them locally to build a complete per-card record.
  • Handle 503 gracefully. Before 6:00 AM UTC the new dump may not exist yet. On 503, respect the Retry-After header (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-At to confirm you got today's data, and X-Export-Downloads-Remaining to 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

Community

Join our Discord for support and updates

SDKs & Libraries

Community-built libraries for popular languages

JS
Coming soon
PY
Coming soon
PHP
Coming soon

Ready to Get Started?

Join thousands of developers building with the most comprehensive Pokemon card API