guides7 min read

Replace the TCGPlayer API in 10 Minutes: A Migration Guide

TCGPlayer/eBay closed new API access. Here's how to swap to TCGAPIs in under 10 minutes — same productId keys, same price fields, plus Cardmarket, Cardtrader, CardKingdom and Manapool prices in one response.

T

TCGAPIs Team

The TCGPlayer API Closure

Since the eBay acquisition, TCGPlayer's affiliate API program has effectively closed to new developers. Application emails go unanswered, the partner portal hasn't accepted new keys for over a year, and even existing partners report tightened rate limits and retired endpoints. If you're building a card pricing tool, an inventory manager, a Discord bot, or a marketplace aggregator in 2026, the TCGPlayer API is no longer a realistic primary data source. The good news: migration is genuinely a 10-minute job because the data shapes are nearly identical.

This guide walks through the full swap. We'll use the same productId you already have in your database, keep your existing price-field handling, and pick up a few endpoints TCGPlayer never offered — live listings, sales history, multi-marketplace pricing — for free.

What You Keep When You Migrate

Before changing anything, here's the reassuring part: TCGAPIs is keyed off the same identifier system TCGPlayer uses. If your database has productId = 512766, that same ID resolves on TCGAPIs. The migration is mostly a header swap and a base URL swap.

You keep:

  • productId — same numeric IDs across both services. No remapping required.
  • marketPrice, lowPrice, midPrice, highPrice, directLowPrice — identical field names and shapes in price responses.
  • SKU IDs — condition-level SKU identifiers (Near Mint, Lightly Played, etc.) match.
  • Group/category structure — what TCGPlayer calls a "group" we call a group; what they call a "category" we call a category.
  • Image URLs — high-res card art comes through unchanged.

If you've been using TCGAPIs' v1 endpoints, this is also a good moment to consider the v2 API, which adds tier-gated multi-marketplace data.

Step 1: Sign Up and Grab Your API Key (1 minute)

Head to the signup page, pick a tier (Hobby works for development), and you'll have an API key in your dashboard immediately. Unlike the TCGPlayer affiliate program, there's no application form, no manual review, and no waiting list. Email verification happens in the background; your key is live the moment you click create.

# Your key looks like this — keep it server-side
TCGAPIS_KEY=tcg_live_a1b2c3d4e5f6...

Step 2: Replace the Auth Header

This is the smallest change. TCGPlayer used a bearer token from their OAuth flow. TCGAPIs uses a single static API key in the x-api-key header — no OAuth, no token refresh, no client_id/client_secret rotation.

Before (TCGPlayer):

curl -X GET 'https://api.tcgplayer.com/v1.39.0/pricing/product/512766' \
  -H 'Authorization: Bearer eyJ0eXAiOiJKV1Qi...'

After (TCGAPIs):

curl -X GET 'https://api.tcgapis.com/api/v2/prices/512766' \
  -H 'x-api-key: tcg_live_a1b2c3d4e5f6'

Same change in Node:

// Before
const res = await fetch(
  `https://api.tcgplayer.com/v1.39.0/pricing/product/${productId}`,
  { headers: { Authorization: `Bearer ${oauthToken}` } }
);
 
// After
const res = await fetch(
  `https://api.tcgapis.com/api/v2/prices/${productId}`,
  { headers: { 'x-api-key': process.env.TCGAPIS_KEY } }
);

Notice what disappeared: the entire OAuth dance. No /token endpoint to hit on cold start, no expiry handling, no refresh logic. One header, set once.

Step 3: Swap the Base URL

The base URL change is mechanical. Search-and-replace https://api.tcgplayer.com/v1.39.0 with https://api.tcgapis.com/api/v2 in your codebase, then update a couple of path segments. Here's the mapping for the most-used endpoints:

TCGPlayer endpointTCGAPIs equivalent
/catalog/categories/api/v2/games
/catalog/categories/{id}/groups/api/v2/expansions/{categoryId}
/catalog/groups/{id}/products/api/v2/cards/{groupId}
/pricing/product/{productId}/api/v2/prices/{productId}
/pricing/sku/{skuId}/api/v2/skuprices/{skuId}

The price response shape is intentionally similar:

{
  "productId": 512766,
  "marketPrice": 24.50,
  "lowPrice": 19.99,
  "midPrice": 23.75,
  "highPrice": 32.00,
  "directLowPrice": 22.10,
  "subTypeName": "Normal"
}

If your existing TCGPlayer client parses response.data[0].marketPrice, that path works unchanged. Most teams complete this step with a single find-and-replace and a re-run of their test suite.

Step 4: The Bonus — Multi-Marketplace Trend Prices

This is the part TCGPlayer never offered. The same productId you already have can pull pricing from five marketplaces in a single response via the trend prices endpoint:

curl 'https://api.tcgapis.com/api/v2/trendprices/512766' \
  -H 'x-api-key: tcg_live_a1b2c3d4e5f6'

Response:

{
  "productId": 512766,
  "providers": {
    "tcgplayer": { "marketPrice": 24.50, "trend7d": 1.20 },
    "cardmarket":  { "marketPrice": 22.80, "trend7d": 0.45 },
    "cardtrader":  { "marketPrice": 23.10, "trend7d": 0.10 },
    "cardkingdom": { "marketPrice": 25.99, "trend7d": -0.50 },
    "manapool":    { "marketPrice": 24.20, "trend7d": 0.95 },
    "cardsphere":  { "marketPrice": 23.40, "trend7d": 0.30 }
  },
  "updatedAt": "2026-05-06T14:32:00Z"
}

If you're building anything market-aware — arbitrage tools, "cheapest right now" widgets, EU-vs-US comparison dashboards, or honest collection valuators — this single endpoint replaces five separate scrapers and a lot of HTML parsing.

Things You Get That TCGPlayer Didn't Give You

Beyond the trend prices, the v2 API exposes a few endpoints with no TCGPlayer equivalent:

  • Live listings/api/v2/livelistings/{productId} returns active marketplace listings in real time, with seller, condition, quantity, shipping, and price. Unlimited tier only.
  • Sales history/api/v2/sales-history/{productId} returns completed sale records for trend analysis, fair-pricing logic, and chart UIs. Business+ tier.
  • SKU-level condition pricing — full Near Mint / Lightly Played / Moderately Played / Heavily Played / Damaged price grid per card.
  • Historic prices/api/v2/historic-prices/{productId} for backfilling time-series databases.
  • No application wait — keys are live in seconds, not weeks.
  • More games — coverage for 40+ TCGs including the long tail (One Piece, Lorcana, Flesh and Blood, Star Wars Unlimited, Sorcery TCG) on day one of release.

Pricing

Full pricing lives on the pricing page, but in short:

  • Hobby — 10,000 requests/month. Hobby+ tier endpoints (cards, expansions).
  • Business — 50,000 requests/month. Adds prices, sales history, historic prices.
  • Unlimited — Unlimited requests. Adds live listings.

If you only need basic catalog data, the public games endpoint requires no key at all.

FAQ

Do I need to change my productId database?

No. TCGAPIs uses the same productId namespace TCGPlayer does. Your existing card-to-id mappings, your watchlists, your inventory database — all of it keeps working without remapping. Same numbers, different host.

Do prices match TCGPlayer?

Yes. Our TCGPlayer-sourced prices come from the same upstream feed and update on the same cadence. The marketPrice, lowPrice, midPrice, highPrice, and directLowPrice values are functionally identical to what you'd get from the TCGPlayer affiliate API. Where we go further is by adding Cardmarket, Cardtrader, CardKingdom, Manapool, and Cardsphere prices alongside, so you can compare across marketplaces in one call.

What about rate limits?

10,000/month on Hobby, 50,000/month on Business, unlimited on Unlimited. No per-second throttle on Unlimited. By comparison, the TCGPlayer affiliate API enforces both monthly and per-second limits that aren't publicly documented.

Can I get historical data?

Yes. The sales history endpoint returns completed sales, and the historic prices endpoint returns a daily price time series suitable for charting and backtesting. Both are on the Business tier and above.

How fresh is the data?

Prices update continuously throughout the day. Live listings reflect what's available on the marketplace right now. Sales history is appended as transactions complete.

Ready to Migrate?

The whole swap is realistically 10 minutes for a small codebase: 1 minute for signup, 2 minutes to swap the auth header, 5 minutes to update base URLs, 2 minutes to run your test suite. Sign up, grab a key, and follow the API documentation for the full endpoint reference. If you want to dig deeper into the TCGPlayer-specific story, see TCGPlayer API Alternatives for the broader landscape.

Get Your API Key

Access real-time pricing, live listings, and sales history for 80+ trading card games.

Start Building
TCGPlayer APIAPI migrationTCG datadeveloper guideREST API