200,000+ daily transactions • 7 platforms • REST + MCP

Trading Card Market Data

The infrastructure layer for trading card market analytics. 200,000+ individual sale transactions ingested daily from every major platform — queryable via REST API and accessible to AI agents via MCP server.

200K+

Daily transactions

7

Platforms covered

38+

Card categories

<15m

Data freshness

The problem with card market data today

The trading card market generates hundreds of thousands of transactions every day across eBay, Goldin, Heritage, REA, Fanatics Vault, Alt, and Pristine. This data exists — it's publicly visible — but accessing it programmatically requires either building and maintaining scrapers for each source or paying for expensive, aggregated feeds that smooth over individual transaction detail.

The Card API solves this by ingesting individual sale records from all major platforms continuously and making them queryable via a single REST endpoint. You get raw transaction data — not an average, not a 90-day rolling estimate — and you can slice it any way your application needs.

What other solutions provide

  • 30/60/90-day average prices
  • Single-platform data (usually eBay only)
  • No Best Offer price capture
  • No listing type differentiation
  • Proprietary formats, no open API

What The Card API provides

  • Individual sale records — every transaction
  • 7 platforms in one unified schema
  • True Best Offer accepted prices
  • Auction, Fixed Price, Best Offer tagged
  • Clean JSON REST API + MCP server

Platform coverage

PlatformListing typesUpdate frequencyBest Offer prices
eBayAuction, Fixed Price, Best OfferEvery 15 minYes — actual accepted price
GoldinLive auction, Buy NowPost-auctionN/A
HeritageSignature auction, PlatinumPost-auctionN/A
REAPremier auctionPost-auctionN/A
Fanatics VaultFractional, Fixed PriceDailyN/A
AltFixed Price marketplaceDailyN/A
PristineFixed Price, Best OfferDailyYes

The data model

Every sale record uses the same schema regardless of platform:

JSON — sale record
{
  "id":           "ebay_3941827461",
  "title":        "2011 Topps Update Mike Trout RC #US175 PSA 10",
  "platform":     "eBay",
  "listing_type": "BestOffer",
  "sale_price":   2450.00,
  "sale_date":    "2025-04-12",
  "listing_url":  "https://www.ebay.com/itm/...",
  "category":     "Baseball Cards"
}

The listing_type field lets you separate auction hammer prices from buy-it-now sales from Best Offer accepted prices — which have meaningfully different market dynamics.

Querying the API

Search recent sales across all platforms in one request:

Python
import requests

API_KEY = "tca_your_key_here"
BASE    = "https://thecardapi.com/api/v1/market"

def search_sales(card: str, platforms: list[str] | None = None) -> list[dict]:
    params = {"q": card, "limit": 100}
    if platforms:
        params["platform"] = ",".join(platforms)

    r = requests.get(
        f"{BASE}/sales",
        params=params,
        headers={"x-market-api-key": API_KEY},
    )
    r.raise_for_status()
    return r.json()["data"]

# Recent Luka Doncic RC PSA 10 across all platforms
sales = search_sales("Luka Doncic Rookie PSA 10")
for s in sales[:5]:
    print(f"{s['platform']:15} {s['listing_type']:12} ${s['sale_price']:,.0f}  {s['sale_date']}")
JavaScript
const API_KEY = "tca_your_key_here";
const BASE    = "https://thecardapi.com/api/v1/market";

async function searchSales(card, { platforms } = {}) {
  const url = new URL(`${BASE}/sales`);
  url.searchParams.set("q",     card);
  url.searchParams.set("limit", 100);
  if (platforms) url.searchParams.set("platform", platforms.join(","));

  const { data } = await fetch(url, {
    headers: { "x-market-api-key": API_KEY },
  }).then((r) => r.json());

  return data;
}

const sales = await searchSales("Luka Doncic Rookie PSA 10");
sales.slice(0, 5).forEach((s) =>
  console.log(s.platform, s.listing_type, s.sale_price, s.sale_date)
);

AI agent access via MCP

The Card API includes an MCP (Model Context Protocol) server with 7 AI-native tools. Any MCP-compatible client — Claude Desktop, Cursor, Claude Code, or any custom agent — can query card market data without writing API integration code.

search_sales

Full-text search + filter by platform, date, price, listing type

get_sale

Retrieve a specific sale record by ID

get_daily

Aggregate statistics for a specific date

get_platforms

List platforms with last-updated timestamps

get_coverage

Data freshness and coverage status

export_csv

Download a filtered set of sales as CSV

get_market_analysis

AI-synthesized market analysis for any card

Claude Desktop — claude_desktop_config.json
{
  "mcpServers": {
    "cardapi": {
      "url": "https://thecardapi.com/api/mcp",
      "headers": {
        "Authorization": "Bearer tca_your_key_here"
      }
    }
  }
}

Pricing tiers

Free

$0

  • 10,000 sales/day
  • 7-day lookback
  • CSV export (10K rows)
  • MCP server access

Starter

$9/mo

  • 50,000 sales/day
  • 7-day lookback
  • CSV export (50K rows)
  • Everything in Free

Pro

$49/mo

  • 500,000 sales/day
  • 30-day lookback
  • Unlimited CSV export
  • Webhook notifications

Enterprise

Custom

  • Unlimited sales/day
  • Full history
  • S3 bulk delivery
  • Dedicated support + SLA

Frequently asked questions

What trading card platforms does the API cover?

eBay (all listing types including Best Offer accepted prices), Goldin, Heritage Auctions, REA, Fanatics Vault, Alt, and Pristine. All platforms are normalized to a single JSON schema.

Does the API return real sale prices or estimated values?

Real sale prices only. Every record is an individual transaction with a verified sale_price and sale_date. For eBay, this includes the actual accepted Best Offer price, not the listing price.

How many transactions are ingested per day?

200,000+ individual sale transactions daily across all platforms. This includes eBay completed listings updated every 15 minutes, major auction house results, and sales from Alt, Fanatics Vault, REA, and Pristine.

Can AI agents use the card market data API?

Yes. The MCP server exposes 7 AI-native tools that work with Claude Desktop, Cursor, Claude Code, and any custom MCP-compatible agent. No integration code required — just add the server config and your API key.

What card categories and sports are covered?

38+ categories including Baseball, Basketball, Football, Hockey, Soccer, Pokemon, Magic: The Gathering, and other TCGs. Search works across all categories by default.

Is there a free tier?

Yes. The Free tier provides 10,000 sales per day, 7-day lookback, CSV export, and MCP server access — no credit card required. Paid plans start at $9/month.

Start building with card market data

Free tier: 10,000 sales/day, no credit card required. Works for most hobby projects and AI agents.

Get Free API Key →