The Best TCGPlayer API Alternative for Developers in 2026
TCGPlayer shut down API access for new developers. Here's how to get real-time trading card game pricing data for Pokemon, Magic, Yu-Gi-Oh!, and 89+ more games using TCG API.
If you’ve tried to get access to the TCGPlayer API recently, you already know the problem: TCGPlayer closed API access to new developers. No application form, no waitlist — just a dead end.
This has left thousands of developers, store owners, and hobbyists scrambling for alternatives. Whether you’re building a price tracker, a collection manager, a store inventory tool, or a Discord bot, you need reliable card pricing data — and TCGPlayer was the only game in town.
Until now.
Why TCGPlayer Closed Their API
In late 2024, TCGPlayer (now owned by eBay) quietly stopped accepting new API applications. Existing API keys still work for some developers, but:
- No new signups — the application page redirects to a generic help article
- Existing keys are being deprecated — many developers report their keys stopped working
- No official timeline — TCGPlayer hasn’t announced when (or if) they’ll reopen access
- eBay integration — the platform is increasingly merging with eBay’s infrastructure
For developers building TCG-related tools, this created an enormous gap in the market. Card pricing data powers everything from buy/sell bots to collection trackers to store pricing tools.
What Developers Actually Need
Based on conversations with hundreds of developers in the TCG community, here’s what matters:
- Multi-game coverage — Not just Pokemon or MTG. Developers want One Piece, Lorcana, Flesh and Blood, Yu-Gi-Oh!, and more
- Real-time prices — Stale data is useless for trading and arbitrage
- Per-printing prices — Normal vs Foil/Holofoil pricing (not just a single price point)
- Simple REST API — No complex OAuth flows, SDKs, or rate limit games
- Affordable pricing — Free tier for testing, reasonable paid plans for production
- Sealed product data — Booster boxes, ETBs, and other sealed products alongside singles
TCG API: Built for This Exact Problem
TCG API was built specifically because TCGPlayer closed their doors. Here’s what we offer:
89+ Games (More Than Any Alternative)
While most alternatives focus on 1-3 games, TCG API covers every game on TCGPlayer — all 89+ of them. That includes:
- Pokemon — 200+ sets, 30,000+ cards
- Magic: The Gathering — 430+ sets, 110,000+ cards
- Yu-Gi-Oh! — 600+ sets, 45,000+ cards
- Disney Lorcana — All sets, updated daily
- One Piece Card Game — All sets, updated daily
- Flesh and Blood — All sets, updated daily
- Star Wars: Unlimited, Digimon, Dragon Ball Super, Weiss Schwarz, and 58 more
Browse all supported games at tcgapi.dev/games.
Real-Time Pricing with Per-Printing Data
Every card has separate pricing for each printing type:
{ "name": "Charizard ex", "set": "Obsidian Flames", "prices": { "Normal": { "market_price": 12.45, "low_price": 10.99, "mid_price": 12.50, "change_24h": 0.35, "change_7d": -0.80, "change_30d": 2.15 }, "Holofoil": { "market_price": 45.99, "low_price": 42.00, "mid_price": 46.50, "change_24h": 1.20 } }}Price changes are tracked across 24-hour, 7-day, and 30-day windows — no need to store historical data yourself (though we offer that on Pro plans too).
Dead-Simple Integration
No OAuth, no API application process, no approval wait. Sign up, get a key, start making requests:
# Search for any card across all gamescurl "https://api.tcgapi.dev/v1/search/cards?q=charizard"
# Get all Pokemon setscurl "https://api.tcgapi.dev/v1/games/pokemon/sets"
# Get prices for a specific cardcurl "https://api.tcgapi.dev/v1/cards/12345" \ -H "Authorization: Bearer YOUR_API_KEY"JavaScript:
const response = await fetch( 'https://api.tcgapi.dev/v1/search/cards?q=charizard&game=pokemon', { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } });const data = await response.json();console.log(data.data[0].prices);Python:
import requests
response = requests.get( 'https://api.tcgapi.dev/v1/search/cards', params={'q': 'charizard', 'game': 'pokemon'}, headers={'Authorization': 'Bearer YOUR_API_KEY'})cards = response.json()['data']print(cards[0]['prices'])How TCG API Compares
| Feature | TCGPlayer API | JustTCG | TCG API |
|---|---|---|---|
| New signups | Closed | Open | Open |
| Games covered | 89+ (existing keys) | ~3 | 89+ |
| Free tier | No | Limited | 100 req/day |
| Per-printing prices | Yes | Partial | Yes |
| Price history | Limited | No | Yes (Pro+) |
| Sealed products | Yes | No | Yes |
| Bulk endpoints | Limited | No | Yes (Pro+) |
| Rate limits | Strict | Unknown | Transparent |
| Search | Full-text | Basic | Full-text |
Pricing That Makes Sense
We know most developers start with a side project. That’s why the free tier exists:
- Free — 100 requests/day, no credit card, perfect for testing
- Hobby ($9.99/mo) — 1,000 req/day, 7-day price history
- Starter ($19.99/mo) — 2,500 req/day, 30-day history, set data dumps
- Pro ($49.99/mo) — 10,000 req/day, full history, bulk endpoints, commercial license
- Business ($99.99/mo) — 50,000 req/day, everything in Pro with higher limits
Annual plans save 17%. See full details at tcgapi.dev/pricing.
Migration Guide: TCGPlayer API → TCG API
If you have existing code that used the TCGPlayer API, here’s how the endpoints map:
Listing Games/Categories
# TCGPlayer (old)GET /catalog/categories
# TCG APIGET /v1/gamesSearching Cards
# TCGPlayer (old)GET /catalog/products?categoryId=1&productName=charizard
# TCG APIGET /v1/search/cards?q=charizard&game=pokemonGetting Prices
# TCGPlayer (old)GET /pricing/product/12345
# TCG APIGET /v1/cards/12345# (prices included in card response)The response formats are similar but simplified. Check our Quick Start guide for a complete walkthrough.
What Developers Are Building
Since launching, developers have used TCG API to build:
- Price tracking bots for Discord and Telegram
- Collection managers that track portfolio value across games
- Store pricing tools that auto-update inventory prices
- Arbitrage finders that compare prices across platforms
- Deck builders with real-time price estimates
- Investment trackers for sealed product prices
Get Started in 2 Minutes
- Sign up at tcgapi.dev/signup (no credit card required)
- Get your API key from the dashboard
- Make your first request — try searching for your favorite card
- Read the docs at tcgapi.dev/introduction
The free tier gives you 100 requests per day — enough to build and test your entire integration before committing to a paid plan.
Common errors when migrating
These are the three gotchas that catch almost every team moving off the TCGPlayer API:
1. 401 Unauthorized after copy-pasting the Bearer example
TCGPlayer used OAuth 2.0 with Authorization: Bearer <access_token> where the access token was refreshed from a client-credentials flow. TCG API uses a static X-API-Key header — the word “Bearer” is nowhere in the mix.
headers = {"Authorization": "Bearer eyJhbGciOi..."}headers = {"X-API-Key": "tcg_live_xxxxxxxxxxxxx"}If you hit 401 with a fresh key, this is 90% of the time the reason.
2. productId became id (and tcgplayer_id is separate)
The old TCGPlayer API used productId as the identifier. TCG API has its own internal id and tracks the original TCGPlayer product ID as a separate tcgplayer_id field. If you are migrating a catalog that stored TCGPlayer product IDs, use the lookup-by-TCGPlayer-ID endpoint to resolve them cleanly:
# Old: look up product by TCGPlayer productIdGET /catalog/products/12345
# New: look up by TCGPlayer ID directly (returns TCG API card data)GET /v1/cards/tcgplayer/123453. Sealed products appeared as Normal printing (fixed in March 2026)
Until March 28 2026, sealed products (booster boxes, ETBs) were returning printing: "Normal" instead of printing: "Sealed". If your integration filtered by printing, you may have accidentally excluded sealed inventory. This is fixed on the live API — just make sure your client isn’t caching the old response shape.
4. Rate-limit semantics are daily, not per-second
TCGPlayer’s rate limit was requests-per-second with bursts. TCG API’s rate limit is requests-per-day that reset at UTC midnight. You do not need exponential-backoff logic on every request — you need a daily-budget monitor. A simple X-RateLimit-Remaining header check at the start of a long-running job is enough to plan your batch size.
Webhooks and event-driven integrations
TCG API does not yet offer webhooks, which is the one area where the old TCGPlayer API had a clear edge. The current workaround: hit /v1/prices/top-movers once per hour to see which cards moved significantly since the last refresh. For store inventory tooling where you mostly care about your existing stock, a batch GET /v1/bulk/prices?ids=… on a cron schedule is more efficient than a webhook firehose anyway.
Webhook support is on the roadmap; subscribe to the changelog to hear when it ships.
Have questions? Join our Discord community or email us at thetcgapi@proton.me.
Ready to get started?
Free tier includes 100 requests per day. No credit card required.