# SportsCardsPro API — sports card price guide from sportscardspro.com: current market price per grade (Ungraded, Grade 1-9.5, PSA 10, BGS 10, BGS 10 Black, CGC 10, SGC 10, TAG 10) for baseball, basketball, football, hockey, soccer, racing, wrestling, UFC, boxing, golf and tennis cards, the monthly price history, the PSA / CGC population report, and the individual completed sales (eBay, Goldin, Heritage, Fanatics) behind the prices. Search, card, price history, sold listings, every card of a set, and the set lists. USD. No login, no key.

> Search SportsCardsPro by player, set, year or card number. Each row has the card id, set, sport and its Ungraded, PSA 10 and Grade 9 prices. The source returns at most 100 rows and has no further pages; narrow with sport / set_id / rookies_only.
> ReefAPI engine `sportscardspro` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/sportscardspro/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/sportscardspro/v1/search — 2 credits
Search SportsCardsPro by player, set, year or card number. Each row has the card id, set, sport and its Ungraded, PSA 10 and Grade 9 prices. The source returns at most 100 rows and has no further pages; narrow with sport / set_id / rookies_only.

**Parameters:**
- `query` (string, required) — Player, set, year or card number words (the site's own search box).
- `sport` (enum, optional) — Only one sport. [one of: baseball-cards, basketball-cards, football-cards, hockey-cards, racing-cards, soccer-cards, ufc-cards, wrestling-cards, golf-cards, tennis-cards, boxing-cards]
- `rookies_only` (boolean, optional, default false) — Only rookie cards.
- `exclude_variants` (boolean, optional, default false) — Leave out parallels / variants (Refractor, Prizm colours, [Rookie] …).
- `set_id` (string, optional) — Only one set: a search row's set_id (G47190 = 1984 Star basketball).
- `sort` (enum, optional, default "popularity") — Result order. [one of: popularity, name, price-highest, change-dollar]

**Returns:** rows[]: id, name, set_name, set_id, category (sport), image, print_run, prices[3]: {condition (Ungraded / PSA 10 / Grade 9), source_key, price_usd} — the site's list index; on a fast-moving card it can trail the card page. meta: possibly_truncated (100 rows = the source's cap), rows_outside_sport, filters_applied, warnings.

**Example request body:**
```json
{
  "query": "michael jordan",
  "sport": "basketball-cards"
}
```

### POST https://api.reefapi.com/sportscardspro/v1/card — 3 credits
One card in full by its id: the price of every grade the site tracks (Full Price Guide), the headline grades with their last change and sales volume, the PSA and CGC population report by grade, card number, rookie flag, eBay ePID, images and how many sold listings each grade shows.

**Parameters:**
- `id` (string, required) — `id` of a search or set row, as is (3225905 = 1984 Star Michael Jordan #101). A <set>/<card> path or a sportscardspro.com/game/… URL also works.

**Returns:** card{id, name, url, category, set_name, set_slug, set_id, image, genre, card_number, print_run, ebay_epid, details{label: value}, images[], population_report{PSA|CGC: [{grade 1-10, population}]}, headline_prices[{source_key, condition, price_usd, change_usd, sales_volume}], price_guide[{condition, condition_key, price_usd}], sold_listing_counts{condition: n}, price_basis}

**Example request body:**
```json
{
  "id": "3225905"
}
```

### POST https://api.reefapi.com/sportscardspro/v1/price_history — 3 credits
The monthly price history behind the card's chart, one series per headline grade (Ungraded, Grade 7, 8, 9, 9.5, PSA 10); the last point is the current month and equals the current price. Months without a price are null.

**Parameters:**
- `id` (string, required) — `id` of a search or set row, as is (3225905 = 1984 Star Michael Jordan #101). A <set>/<card> path or a sportscardspro.com/game/… URL also works.

**Returns:** card{id, name, url, category, set_name}, series[{condition, source_key, priced_points, first_month, last_month, latest_price_usd, points[{month (YYYY-MM), timestamp_ms, price_usd}]}]

**Example request body:**
```json
{
  "id": "3225905"
}
```

### POST https://api.reefapi.com/sportscardspro/v1/sales — 3 credits
The completed sales the site shows for a card, per grade (up to 30 per grade, newest first): date, listing title, sold price (best-offer: accepted price plus list price), marketplace and the item link.

**Parameters:**
- `id` (string, required) — `id` of a search or set row, as is (3225905 = 1984 Star Michael Jordan #101). A <set>/<card> path or a sportscardspro.com/game/… URL also works.
- `condition` (string, optional) — Only the sales of one grade, by the page's own label (Ungraded, Grade 1 … Grade 9.5, PSA 10, BGS 10, CGC 10, SGC 10 …). A label the card does not have is rejected with the list it has.

**Returns:** card{id, name, url, category, set_name}, groups[{condition, source_key, condition_ambiguous, count, sales[{sale_id, date, title, price_usd, best_offer, best_offer_list_price_usd, source, source_label, source_item_id, url}]}]

**Example request body:**
```json
{
  "id": "3225905",
  "condition": "Grade 7"
}
```

### POST https://api.reefapi.com/sportscardspro/v1/set — 2 credits
Every card of one set with its Ungraded, PSA 10 and Grade 9 prices and the latest price change, 150 per page.

**Parameters:**
- `set` (string, required) — Set slug: a sets row's set_slug or a card's set_slug (basketball-cards-1984-star, baseball-cards-1952-topps).
- `sort` (enum, optional, default "popularity") — Order of the set's cards. [one of: popularity, name, release-date, highest-price, lowest-price, change-dollar]
- `cursor` (integer, optional, default 0) — Paging: pass meta.next_cursor of the previous page (150 cards per page).

**Returns:** rows[]: id, name, set_slug, product_slug, url, category, image, print_run, prices[3]: {condition (Ungraded / PSA 10 / Grade 9), source_key, price_usd} — the site's list index; on a fast-moving card it can trail the card page, price_change_usd, price_change_pct. meta: next_cursor, has_more.

**Example request body:**
```json
{
  "set": "basketball-cards-1984-star"
}
```

### POST https://api.reefapi.com/sportscardspro/v1/sets — 2 credits
The popular sets the site lists for one sport (with the slug the `set` action takes), plus the sport's most popular players and card brands.

**Parameters:**
- `sport` (enum, required) — Which sport's sets to list. [one of: baseball-cards, basketball-cards, football-cards, hockey-cards, racing-cards, soccer-cards, ufc-cards, wrestling-cards, golf-cards, tennis-cards, boxing-cards]

**Returns:** rows[]: set_slug, name, url. data.popular_players[{name, query, url}], data.brands[{name, url}]. meta: list_title.

**Example request body:**
```json
{
  "sport": "basketball-cards"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=sportscardspro
- Human docs page: https://reefapi.com/docs/sportscardspro
- Overview page: https://reefapi.com/sportscardspro-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
