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

Pro daily sales-row allowance

7

Platforms covered

38+

Card categories

90 days

Pro query window

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 OfferAs source data becomes availableYes — 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 server with five sold-price and market-analysis 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_cards

Search sold prices with market filters

grade_impact_analysis

Compare prices across a card's grade ladder

grading_value_calculator

Model grading cost and potential value

grader_comparison

Compare market prices across graders

price_momentum

Compare recent pricing windows

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 rows returned per UTC day
  • ✓3-day lookback
  • ✓Cursor pagination
  • ✓MCP server access

Starter

$9/mo

  • ✓10,000 sales rows returned per UTC day
  • ✓14-day lookback
  • ✓CSV export
  • ✓Everything in Free

Pro

$199/mo

  • ✓200,000 sales rows returned per UTC day
  • ✓90-day lookback
  • ✓Catalog API included
  • ✓Add-ons available

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 five sold-price and market-analysis tools that work with MCP-compatible clients. 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 rows returned per UTC 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 rows returned per UTC day, no credit card required. Works for most hobby projects and AI agents.

Get Free API Key →