# Fanatics Collect API — fanaticscollect.com (formerly PWCC) trading-card auctions and marketplace: search live and sold Weekly auction, Premier auction and Buy Now lots by keyword, category (Pokémon English / Japanese, One Piece, Magic, Yu-Gi-Oh!, basketball, baseball, football …), grader, grade, year and price, with current bid, bid count, end time, sold price with and without buyer's premium, grade, cert and images; full lot detail with population, estimated value and recent sales of the same card; the public sales archive back to 2012; and the auction calendar. USD. No login, no key.

> Search Fanatics Collect lots and listings — live now (default) or sold since 2022 — across Weekly auctions, Premier auctions and Buy Now. Each row carries the current bid and bid count (or the Buy Now price), the auction's end time, or for sold lots the sold price with the buyer's premium and the hammer price, plus grader, grade, cert number, category, estimated value, images and the listing link.
> ReefAPI engine `fanaticscollect` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/fanaticscollect/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/fanaticscollect/v1/search — 2 credits
Search Fanatics Collect lots and listings — live now (default) or sold since 2022 — across Weekly auctions, Premier auctions and Buy Now. Each row carries the current bid and bid count (or the Buy Now price), the auction's end time, or for sold lots the sold price with the buyer's premium and the hammer price, plus grader, grade, cert number, category, estimated value, images and the listing link.

**Parameters:**
- `query` (string, optional) — Words to find in the lot title (year, set, player / character, number, grade). All words must match; typos are tolerated. Empty = browse with filters.
- `status` (enum, optional, default "live") — live = open lots and listings now (default); sold = finished sales since 2022 with the sold price; all = both. For older sales use `sales_history`. [one of: live, sold, all]
- `type` (enum, optional) — Only Weekly auction lots, Premier auction lots or Buy Now listings. [one of: weekly, premier, buy_now]
- `category` (enum, optional) — One category as the site files it. 'pokemon' = all three Pokémon languages. [one of: pokemon, pokemon_english, pokemon_japanese, pokemon_other_languages, one_piece, magic, yugioh, other_tcg, basketball, baseball, football, soccer, hockey, combat_sports, racing, golf, misc_sports, non_sports, wax, memorabilia, tickets, photos]
- `category_group` (enum, optional) — Top-level group (all trading card games, all sports cards …). [one of: trading_card_games, sports_cards, other, comics, video_games]
- `grader` (enum, optional) — Only items graded by one company. [one of: PSA, CGC, BGS, SGC, CSG, BVG, BCCG, MBA, WATA, VGA, CBCS, PCGS, UDA, GAI, PSA/DNA, Other Approved, Ungraded]
- `grade_min` (number, optional) — Grade at least this (e.g. 9.5).
- `grade_max` (number, optional) — Grade at most this (graded items only).
- `year_min` (integer, optional) — Card year from (inclusive).
- `year_max` (integer, optional) — Card year to (inclusive).
- `min_price` (number, optional) — price_usd at least this many USD — the current (or opening) bid on a live lot, the asking price on Buy Now, the hammer price on a sold lot.
- `max_price` (number, optional) — price_usd at most this many USD (same price as min_price).
- `eye_appeal` (enum, optional) — Only items with Fanatics' (PWCC) eye-appeal rating A, E or S. [one of: A, E, S]
- `auction_id` (string, optional) — Only lots of one auction event — an `auctions` row's auction_id.
- `sort` (enum, optional, default "relevance") — Result order. [one of: relevance, best_value, recently_added, best_deals, lot_number, price_asc, price_desc, year_asc, year_desc, sold_date_asc, sold_date_desc]
- `page` (integer, optional, default 1) — Page number, 1 = first. The source serves the first 2,399 results of a query (page × limit); narrow with filters to reach the rest.
- `limit` (integer, optional, default 24) — Rows per page (1-50; the site's own page is 48).

**Returns:** rows[]: listing_id, integer_id, object_id, type (weekly | premier | buy_now), status (live | sold), title, subtitle, lot, auction_id, auction_name, price_usd (what the site shows: current bid — opening bid while there are no bids — on a live lot, asking price on Buy Now, hammer on a sold lot), current_bid_usd (live lots with bids), buy_now_price_usd (live Buy Now), last_asking_price_usd (sold Buy Now), starting_bid_usd, bid_count, sold_price_usd (sold: what the buyer paid — auctions include the 20 % buyer's premium; on a Buy Now listing that accepted offers it is null, because an accepted offer can be below the asking price: `item` and `sales_history` have the paid price), sold_price_is_computed (true = the index lacks the sale record and the price is hammer × 1.20, the number the site's own page prints), hammer_price_usd (sold auction lots, without premium), sold_at, starts_at, ends_at (auction close; extended bidding follows), estimated_value_usd, allow_offers, has_offers, great_price, fanatics_authentic, flash, eye_appeal, favorited_count, grader, grade, cert, year, card_number, subject, category, category_group, subcategory, teams, certified_seller, seller_id, ships_internationally, listed_at, created_at, updated_at, image, images[{large, medium, small, thumbnail}], url. meta: total (matching lots; an estimate on very large sets, total_is_estimate), page, limit, has_more, filters_applied, warnings.

**Example request body:**
```json
{
  "query": "charizard",
  "category": "pokemon"
}
```

### POST https://api.reefapi.com/fanaticscollect/v1/item — 1 credit
One listing in full by its listing_id or URL: title, lot, the auction and its timer, current bid, starting price and bid count (auctions) or Buy Now price and offers, sold price and date, grader, grade, cert and graded population, card year / set / subject / number, Fanatics' estimated market value, the Card Ladder estimate, this listing's sales, the recent sales of the same card in the same grade, description and every image.

**Parameters:**
- `listing_id` (string, required) — A search / sales_history row's listing_id, or the listing's fanaticscollect.com URL (/weekly/…, /premier/…, /buy-now/…).
- `type` (enum, optional) — Optional: the listing's type, when known (a URL already says it). [one of: weekly, premier, buy_now]

**Returns:** item{listing_id, integer_id, type, status (live | sold | closed), status_raw, title, subtitle, lot, current_bid_usd (live, with bids), hammer_price_usd (sold auction lots), starting_price_usd, bid_count, buy_now_price_usd, previous_asking_price_usd, allow_offers, quantity_available, sold_price_usd (what the buyer paid; auctions incl. the 20 % buyer's premium), sold_price_is_computed, sold_at, sales[{sold_at, sold_price_usd}], auction{auction_id, type, name, short_name, status, starts_at, ends_at, payout_date, extended_bidding{window_ends_at, window_seconds, window_number}}, estimated_value_usd, suggested_asking_price_usd, card_ladder{estimated_value_usd, confidence, url}, great_price, fanatics_authentic, flash, eye_appeal, favorited_count, certified_seller, card{grading_status, grader, grade, population, cert, cert_url, year, brand, set, subject, card_number, parallel, team}, vault_item_id, vault_origin, similar_sales[{sold_at, sold_price_usd}] (same card and grade, newest first), description, product_detail, image, images[], video, listed_at, updated_at, slug, url}

**Example request body:**
```json
{
  "listing_id": "61c7cdb4-c280-11f1-9bc0-0a58a9feac02"
}
```

### POST https://api.reefapi.com/fanaticscollect/v1/sales_history — 2 credits
Fanatics Collect's public sales archive (its 'Sales History' page): about 5.5 million sales since 2012, including the PWCC Monthly and Flash auctions — sold price and date, marketplace, category, grader, grade, eye appeal, year, cert and images. Filter by title words, kind of sale, category, grader, eye appeal, year and price; newest, oldest, highest or lowest first.

**Parameters:**
- `query` (string, optional) — Words to find in the sold item's title.
- `type` (enum, optional) — Only one kind of sale (the site's filter: Buy Now / Auction / Premier, plus the single auction kinds). [one of: buy_now, auction, weekly, premier, monthly, flash]
- `category` (enum, optional) — One category as the sales archive files it. [one of: baseball, basketball, football, hockey, golf, boxing_mma, soccer, tennis, racing, misc_sports, non_sport, yugioh, magic, pokemon, collectible_card_games, memorabilia, photos, comics, tickets, coins, video_games]
- `grader` (enum, optional) — Only one grading company (or ungraded). [one of: PSA, SGC, BGS, BVG, BCCG, CGC, CSG, ungraded]
- `eye_appeal` (enum, optional) — Only items with Fanatics' (PWCC) eye-appeal rating A, E or S. [one of: A, E, S]
- `year_min` (integer, optional) — Card year from (inclusive).
- `year_max` (integer, optional) — Card year to (inclusive).
- `min_price` (number, optional) — Sold price at least this many USD.
- `max_price` (number, optional) — Sold price at most this many USD.
- `sort` (enum, optional, default "sold_date_desc") — Result order. [one of: sold_date_desc, sold_date_asc, price_desc, price_asc]
- `page` (integer, optional, default 1) — Page number, 1 = first. The archive serves the first 999 sales of a query (page × limit); narrow with filters to reach older ones.
- `limit` (integer, optional, default 20) — Rows per page (1-50, the archive's own maximum).

**Returns:** rows[]: sale_id, listing_id (sales since late 2022; opens `item`), integer_id, type (buy_now | weekly | premier | monthly | flash), title, subtitle, sold_price_usd, price_includes_buyers_premium (auctions yes, Buy Now no), sold_at (ISO with the US Pacific offset the archive uses), quantity, category, grader, grade, eye_appeal, year, cert, description, payment_status, image, images[], youtube_key, url. meta: total, page, limit, has_more, filters_applied.

**Example request body:**
```json
{
  "query": "charizard",
  "category": "pokemon"
}
```

### POST https://api.reefapi.com/fanaticscollect/v1/auctions — 1 credit
The Weekly and Premier auction events the site lists now — the live ones, the upcoming one and the last closed ones — with start and end times, status and payout date. Pass a row's auction_id to `search` to list that auction's lots.

**Parameters:** none

**Returns:** rows[]: auction_id, type (weekly | premier), integer_id, name, short_name, status (LIVE | PREVIEW | CLOSED), starts_at, ends_at, payout_date, extended_bidding_window_ends_at, extended_bidding_window_seconds, url

## 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=fanaticscollect
- Human docs page: https://reefapi.com/docs/fanaticscollect
- Overview page: https://reefapi.com/fanaticscollect-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
