NewThe Catalog API is live — 15M+ cards with permanent UCIDs. Included with Pro.Explore →
The Card API
Sales + catalog data • REST + MCP

Trading Card Market Data

Individual sale records and catalog data for trading-card analytics — queryable through REST and accessible to AI agents through MCP.

200K+

Daily transactions

7

Platforms covered

38+

Card categories

<15m

Data freshness

The problem with card market data today

Trading-card sales are fragmented across marketplaces and auction houses. Product teams often need a consistent way to query individual transaction detail across those sources.

The Card API makes supported sale records queryable through a single REST endpoint. You get transaction-level data — not an average or 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
  • eBay — all listing types
  • 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 OfferContinuouslyYes — actual accepted price

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 eBay sales:

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

  • 5,000 sales/day
  • 3-day lookback
  • Cursor pagination
  • MCP server access

Starter

$9/mo

  • 10,000 sales/day
  • 14-day lookback
  • CSV export
  • Everything in Free

Pro

$49/mo

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

Enterprise

Custom

  • Custom volume
  • Negotiated history
  • Bulk delivery options
  • Dedicated support

Frequently asked questions

What trading card platforms does the API cover?

eBay — Auction, Fixed Price, and Best Offer accepted prices. True Best Offer prices are captured at the accepted value, not the listing price.

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?

New auction, fixed-price, and supported accepted-offer records are added daily.

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 5,000 sales per day, 3-day lookback, cursor pagination, and MCP server access — no credit card required. Paid plans start at $9/month.

Start building with card market data

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

Get Free API Key →