# PriceCharting API — collectible price guide from pricecharting.com: current market price per condition and grade (Loose / CIB / New / Graded for video games; Ungraded, Grade 1-9.5, PSA 10, BGS 10, CGC 10, SGC 10 for Pokémon, Magic, Yu-Gi-Oh!, One Piece and Lorcana cards; 2.0-10 for comic books; VG-MS70 for coins; Funko Pop and LEGO), the monthly price history behind the chart, sales volume, and the completed sales (eBay, Goldin, Heritage, Fanatics) the prices are computed from. Search, product, price history, sold listings, every product of a console or card set, and the set lists. Prices are the site's estimates in USD. No login, no key.

> Search PriceCharting by name, card number, UPC or ASIN. Each row has the product id, console / set, category and three headline prices with the page's own condition labels. The source returns at most 100 rows (200 with a category filter) and has no further pages; narrow with category / console_id / region.
> ReefAPI engine `pricecharting` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/pricecharting/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/pricecharting/v1/search — 2 credits
Search PriceCharting by name, card number, UPC or ASIN. Each row has the product id, console / set, category and three headline prices with the page's own condition labels. The source returns at most 100 rows (200 with a category filter) and has no further pages; narrow with category / console_id / region.

**Parameters:**
- `query` (string, required) — What to look for: a product, card, comic, coin or set name, a card number, a UPC or an ASIN (the site's own search box).
- `category` (enum, optional) — Only one product family. trading-cards covers every card game (Pokémon, Magic, Yu-Gi-Oh!, One Piece, Lorcana, Star Wars, Marvel …). [one of: video-games, trading-cards, comic-books, funko-pops, coins, lego-sets]
- `console_id` (string, optional) — Only one console / card set / comic series: a search row's `console_id` (G4 = Nintendo 64, G10623 = Pokémon Base Set).
- `exclude_variants` (boolean, optional, default false) — Leave out variants (Player's Choice, 1st Edition, Newsstand …).
- `region` (enum, optional) — Only one release region (video games): Japan, NTSC (Americas) or PAL. [one of: japan, ntsc, pal]
- `sort` (enum, optional, default "popularity") — Result order. [one of: popularity, name, price-highest, change-dollar]

**Returns:** rows[]: id, name, console_name, console_id, category, image, print_run, prices[3]: {condition (the page's own label for this category — e.g. Loose / New / Complete for games, Ungraded / PSA 10 / Grade 9 for cards, Ungraded / 8.0 / 6.0 for comics, Ungraded / MS66 / MS62 for coins), source_key, price_usd} — the site's list index; on a fast-moving product it can trail the product page (measured 15/18 equal). meta: possibly_truncated (true when the row count hits the source's 100 / 200 cap), filters_applied, warnings.

**Example request body:**
```json
{
  "query": "charizard",
  "category": "trading-cards"
}
```

### POST https://api.reefapi.com/pricecharting/v1/product — 3 credits
One product in full by its id: every condition / grade the site prices (the Full Price Guide), the headline prices with the last change and the sales volume, release date, publisher, genre, UPC / ASIN / eBay ePID / TCGPlayer id, card or model number, variants and how many sold listings each condition shows.

**Parameters:**
- `id` (string, required) — `id` of a search or console row, as is (3924 = Super Mario 64 on Nintendo 64). A <console>/<product> path or a pricecharting.com/game/… URL is also accepted.

**Returns:** product{id, name, url, category, console_name, console_slug, console_id, image, release_date, release_date_text, genre, publisher, developer, upc, asin, ebay_epid, tcgplayer_id, card_number, model_number, box_number, print_run, description, details{label: value}, variants[{id, name}], images[{url, caption}], population_report{PSA|CGC: [{grade 1-10, population}]} (graded cards; null elsewhere), flags{}, 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": "3924"
}
```

### POST https://api.reefapi.com/pricecharting/v1/price_history — 3 credits
The monthly price history behind the product's chart, one series per condition (the price at each month; 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 console row, as is (3924 = Super Mario 64 on Nintendo 64). A <console>/<product> path or a pricecharting.com/game/… URL is also accepted.

**Returns:** product{id, name, url, category, console_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": "715593"
}
```

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

**Parameters:**
- `id` (string, required) — `id` of a search or console row, as is (3924 = Super Mario 64 on Nintendo 64). A <console>/<product> path or a pricecharting.com/game/… URL is also accepted.
- `condition` (string, optional) — Only the sales of one condition / grade, by the page's own label (Loose, CIB, New, Ungraded, Grade 9, PSA 10, 9.8, MS65 …). A label the product does not have is rejected with the list it has.

**Returns:** product{id, name, url, category, console_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": "3924",
  "condition": "CIB"
}
```

### POST https://api.reefapi.com/pricecharting/v1/console — 2 credits
Every product of one console, card set, comic series or coin series with three headline prices and the latest price change, 150 per page.

**Parameters:**
- `console` (string, required) — Console / set / series slug: a row's `console_slug` from `consoles` or `console` (nintendo-64, pokemon-base-set, comic-books-amazing-spider-man, coins-morgan-dollar).
- `sort` (enum, optional, default "popularity") — Order of the set's products. [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 products per page). 0 / empty = the first page.

**Returns:** rows[]: id, name, console_slug, product_slug, url, category, image, print_run, prices[3]: {condition (the page's own label for this category — e.g. Loose / New / Complete for games, Ungraded / PSA 10 / Grade 9 for cards, Ungraded / 8.0 / 6.0 for comics, Ungraded / MS66 / MS62 for coins), source_key, price_usd} — the site's list index; on a fast-moving product it can trail the product page (measured 15/18 equal), price_change_usd, price_change_pct. meta: next_cursor (null on the last page), has_more, category.

**Example request body:**
```json
{
  "console": "nintendo-64"
}
```

### POST https://api.reefapi.com/pricecharting/v1/consoles — 2 credits
The consoles / card sets / comic series / coin series the site lists for one category ('Browse Popular …' — the popular list, not every comic series), with the slug the `console` action takes.

**Parameters:**
- `category` (enum, required) — Which product family's sets / consoles / series to list. [one of: video-games, pokemon-cards, magic-cards, yugioh-cards, one-piece-cards, lorcana-cards, comic-books, funko-pops, lego-sets, coins]

**Returns:** rows[]: console_slug, name, url. meta: list_title.

**Example request body:**
```json
{
  "category": "pokemon-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=pricecharting
- Human docs page: https://reefapi.com/docs/pricecharting
- Overview page: https://reefapi.com/pricecharting-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
