# Collectr API scraper - trading card and collectibles price guide: raw and graded prices (PSA, BGS, CGC, TAG, ACE, ARS, AGS) per card and variant, one year of daily price history per grade, sealed product, Pokémon EN/JP/CN, Magic, Yu-Gi-Oh!, One Piece, Lorcana and 30+ games, set lists and set analytics, trending and biggest movers. Prices in USD or 35 other currencies. No account, no browser.

> Search Collectr's price guide by name across every game, or browse a category, a set or a price band: each row has the product id, set, card number, rarity, variant (Holofoil, 1st Edition, Reverse Holo …), the raw market price with Collectr's latest change, which graders and grades have a price, the image and the Collectr URL. Filter by category, set, language (EN/JP/CN), cards or sealed and price range; sort by price, trending, newest, name or card number. 30 rows a page.
> ReefAPI engine `collectr` · 10 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/collectr/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.
- **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). Clients that add connectors by URL, such as ChatGPT and the Claude app, connect with OAuth 2.1 (the user pastes their key once on a ReefAPI page; discovery at `/.well-known/oauth-protected-resource/mcp`). Config files send the key as `Authorization: Bearer <key>`. `?key=<key>` in the URL also works as a last-resort fallback.

## Endpoints

### POST https://api.reefapi.com/collectr/v1/search — 2 credits
Search Collectr's price guide by name across every game, or browse a category, a set or a price band: each row has the product id, set, card number, rarity, variant (Holofoil, 1st Edition, Reverse Holo …), the raw market price with Collectr's latest change, which graders and grades have a price, the image and the Collectr URL. Filter by category, set, language (EN/JP/CN), cards or sealed and price range; sort by price, trending, newest, name or card number. 30 rows a page.

**Parameters:**
- `query` (string, optional) — Card or product name, as typed in the site's search box (may include a card number). Optional when category or set_id is given.
- `category` (enum, optional) — Game or collectible category by name (pokemon, magic, yugioh, one_piece, lorcana, …) or Collectr category id. `categories` lists them all. [one of: pokemon, magic, yugioh, one_piece, lorcana, flesh_and_blood, riftbound, dragon_ball_super_fusion_world, dragon_ball_super, dragon_ball_z, digimon, weiss_schwarz, union_arena, star_wars_unlimited, star_wars_destiny, sorcery_contested_realm, grand_archive, final_fantasy_tcg, gundam_card_game, hololive, elestrals, metazoo, palworld, cyberpunk, force_of_will, cardfight_vanguard, shadowverse, gate_ruler, transformers_tcg, universus, wixoss, battle_spirits_saga, funko, marvel, basketball, watches, zerocool]
- `set_id` (string, optional) — Collectr set id (from sets or any row's set_id) - lists the products of that set.
- `language` (enum, optional) — Card language: en, jp or cn (Pokémon has all three; most games are English only). [one of: en, jp, cn]
- `product_type` (enum, optional, default "all") — Singles, sealed product, or both. [one of: all, cards, sealed]
- `price_min` (number, optional) — Lowest market price, USD (inclusive).
- `price_max` (number, optional) — Highest market price, USD (inclusive). Products with no price yet match a max-only range.
- `sort` (enum, optional, default "relevance") — Order of results. [one of: relevance, price_desc, price_asc, trending, newest, oldest, name_asc, name_desc, card_number_asc, card_number_desc]
- `page` (integer, optional, default 1) — Page number; Collectr serves 30 rows a page.
- `limit` (integer, optional, default 30) — Rows to return from the page (1-30).
- `currency` (enum, optional, default "USD") — Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate). [one of: USD, CAD, EUR, GBP, AUD, CNY, JPY, KRW, NZD, DKK, NOK, SEK, AED, HKD, SGD, PHP, PLN, MYR, MXN, CHF, TTD, IDR, KWD, SAR, BHD, CZK, CLP, TWD, PEN, VND, THB, ZAR, INR, QAR, BRL, EGP]
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** query, results[]{product_id, name, category, category_id, category_slug, set_name, set_id, set_slug, card_number, rarity, variant, is_card, product_type (card|sealed_or_other), language (when filtered), market_price (null when the site has no price yet), previous_market_price, price_change, price_change_percent, has_price, graded_prices_available[]{grader, grade, grade_name, grade_id}, image_url, url}, count, page, limit, has_more, currency, exchange_rate, filters{}

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

### POST https://api.reefapi.com/collectr/v1/product — 2 credits
One card or sealed product in full: the raw (ungraded) market price of every variant and EVERY graded price Collectr tracks (PSA, BGS, CGC, TAG, ACE, ARS, AGS; grader, grade and grade name such as CGC 10 Pristine vs Gem Mint or BGS 10 Black Label) with each price's latest change and date, set and card number, rarity, card text, images per variant, card language, the TCGplayer product id and link.

**Parameters:**
- `product_id` (string, required) — Collectr product id from search (for TCGplayer-listed items it equals the TCGplayer product id), or the product URL on app.getcollectr.com.
- `currency` (enum, optional, default "USD") — Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate). [one of: USD, CAD, EUR, GBP, AUD, CNY, JPY, KRW, NZD, DKK, NOK, SEK, AED, HKD, SGD, PHP, PLN, MYR, MXN, CHF, TTD, IDR, KWD, SAR, BHD, CZK, CLP, TWD, PEN, VND, THB, ZAR, INR, QAR, BRL, EGP]
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** product{product_id, name, category, category_id, category_slug, set_name, set_id, set_slug, set_url, cards_in_set, card_number, rarity, is_card, product_type, language, description, image_url, url, tcgplayer_product_id, tcgplayer_url, cardmarket_url, added_to_collectr_at, variants[]{variant, image_url}, market_price, price_change, price_change_percent, raw_prices[]{variant, market_price, price_change, price_change_percent, price_date}, graded_prices[]{variant, grader, grade, grade_name, grade_label, grade_id, market_price, price_change, price_change_percent, price_date}, graders[], graded_price_count}, currency, exchange_rate

**Example request body:**
```json
{
  "product_id": "106999"
}
```

### POST https://api.reefapi.com/collectr/v1/price_history — 3 credits
The daily price history behind a product's chart, about one year back: one series per variant and grade (raw by default; a grader such as PSA, a single grade such as PSA 10, or all graded series), each with every daily point, the first and latest price and the change over the window.

**Parameters:**
- `product_id` (string, required) — Collectr product id from search (for TCGplayer-listed items it equals the TCGplayer product id), or the product URL on app.getcollectr.com.
- `grader` (enum, optional, default "raw") — Which series: raw (default), one grader, or all. [one of: raw, all, PSA, BGS, CGC, TAG, ACE, ARS, AGS]
- `grade` (string, optional) — One grade of the chosen grader (e.g. 10, 9.5, 9). Grade 10 can be two series (e.g. CGC Gem Mint 10 and Pristine 10); both are returned.
- `variant` (string, optional) — One variant (product[].variants), e.g. Holofoil, Reverse Holofoil, 1st Edition.
- `days` (integer, optional) — Only the last N days of each series (default: everything Collectr shows, ~1 year).
- `currency` (enum, optional, default "USD") — Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate). [one of: USD, CAD, EUR, GBP, AUD, CNY, JPY, KRW, NZD, DKK, NOK, SEK, AED, HKD, SGD, PHP, PLN, MYR, MXN, CHF, TTD, IDR, KWD, SAR, BHD, CZK, CLP, TWD, PEN, VND, THB, ZAR, INR, QAR, BRL, EGP]
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** product{product_id, name, set_name, card_number, url}, series[]{variant, grader, grade, grade_name, grade_label, grade_id, points_count, first_date, last_date, first_price, latest_price, change_percent, points[]{date, price}}, series_count, currency, exchange_rate

**Example request body:**
```json
{
  "product_id": "106999"
}
```

### POST https://api.reefapi.com/collectr/v1/suggest — 1 credit
Collectr's own search-as-you-type: up to 10 matching products with id, set, card number, rarity and image - the quickest way to turn a card name into a product_id.

**Parameters:**
- `query` (string, required) — Start of a card or product name.
- `set_id` (string, optional) — Collectr set id (from sets or any row's set_id) - lists the products of that set.
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** query, results[]{product_id, name, category, set_name, card_number, rarity, is_card, image_url, url}, count

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

### POST https://api.reefapi.com/collectr/v1/sets — 2 credits
Every set (expansion) Collectr lists for a game, newest first: set id, name, card count, release date, logo and URL. Pokémon has English, Japanese and Chinese set lists.

**Parameters:**
- `category` (enum, required) — Game whose sets to list (games with set lists only). [one of: pokemon, magic, yugioh, one_piece, lorcana, flesh_and_blood, riftbound, dragon_ball_super_fusion_world, dragon_ball_super, digimon, weiss_schwarz, union_arena, star_wars_unlimited, sorcery_contested_realm, grand_archive, final_fantasy_tcg, gundam_card_game, hololive, elestrals, metazoo, palworld, cyberpunk]
- `language` (enum, optional, default "en") — Set language (Pokémon: en, jp, cn). [one of: en, jp, cn]
- `query` (string, optional) — Only sets whose name contains this text.
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** category{category_id, name, image_url}, language, languages[]{code, name}, sets[]{set_id, name, card_count, release_date, order, language, image_url, slug, url}, count

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

### POST https://api.reefapi.com/collectr/v1/set — 2 credits
One set's analytics as Collectr shows them: the total value of the set today and its value history, volatility score, biggest market movers, how many cards fall in each price band, rarity and variant breakdown, weekly sales volume and the most wishlisted cards - plus the set's name, code, release date and card count. Use search with set_id for the full card list with prices.

**Parameters:**
- `set_id` (string, required) — Collectr set id (from sets or a row's set_id) or a set URL.
- `history_days` (integer, optional) — Only the last N days of the set value history (default: all of it).
- `currency` (enum, optional, default "USD") — Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate). [one of: USD, CAD, EUR, GBP, AUD, CNY, JPY, KRW, NZD, DKK, NOK, SEK, AED, HKD, SGD, PHP, PLN, MYR, MXN, CHF, TTD, IDR, KWD, SAR, BHD, CZK, CLP, TWD, PEN, VND, THB, ZAR, INR, QAR, BRL, EGP]
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** set{set_id, name, abbreviation, category, category_id, card_count, release_date, image_url, slug, url}, total_set_value, total_set_value_date, total_set_value_history[]{date, value}, volatility_score, volatility, volatility_description, market_movers[]{product_id, name, card_number, rarity, market_price, previous_market_price, price_change, price_change_percent, image_url, url}, price_distribution[]{min_price, max_price, count}, rarity_breakdown[]{name, count}, variant_breakdown[]{name, count}, weekly_sales_volume[]{week, percent_of_sales}, most_wishlisted[]{…, wishlist_count}, currency, exchange_rate

**Example request body:**
```json
{
  "set_id": "1663"
}
```

### POST https://api.reefapi.com/collectr/v1/trending — 2 credits
What collectors are looking at on Collectr today: products ordered by today's views, optionally for one game or cards / sealed only, with the three most viewed products and their view counts.

**Parameters:**
- `category` (enum, optional) — Game or collectible category by name (pokemon, magic, yugioh, one_piece, lorcana, …) or Collectr category id. `categories` lists them all. [one of: pokemon, magic, yugioh, one_piece, lorcana, flesh_and_blood, riftbound, dragon_ball_super_fusion_world, dragon_ball_super, dragon_ball_z, digimon, weiss_schwarz, union_arena, star_wars_unlimited, star_wars_destiny, sorcery_contested_realm, grand_archive, final_fantasy_tcg, gundam_card_game, hololive, elestrals, metazoo, palworld, cyberpunk, force_of_will, cardfight_vanguard, shadowverse, gate_ruler, transformers_tcg, universus, wixoss, battle_spirits_saga, funko, marvel, basketball, watches, zerocool]
- `language` (enum, optional) — Card language: en, jp or cn (Pokémon has all three; most games are English only). [one of: en, jp, cn]
- `product_type` (enum, optional, default "all") — Singles, sealed product, or both. [one of: all, cards, sealed]
- `page` (integer, optional, default 1) — Page number; Collectr serves 30 rows a page.
- `limit` (integer, optional, default 30) — Rows to return from the page (1-30).
- `currency` (enum, optional, default "USD") — Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate). [one of: USD, CAD, EUR, GBP, AUD, CNY, JPY, KRW, NZD, DKK, NOK, SEK, AED, HKD, SGD, PHP, PLN, MYR, MXN, CHF, TTD, IDR, KWD, SAR, BHD, CZK, CLP, TWD, PEN, VND, THB, ZAR, INR, QAR, BRL, EGP]
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** top_viewed[]{product_id, views_today}, results[]{product_id, name, category, category_id, category_slug, set_name, set_id, set_slug, card_number, rarity, variant, is_card, product_type (card|sealed_or_other), language (when filtered), market_price (null when the site has no price yet), previous_market_price, price_change, price_change_percent, has_price, graded_prices_available[]{grader, grade, grade_name, grade_id}, image_url, url}, count, page, has_more, currency

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

### POST https://api.reefapi.com/collectr/v1/movers — 2 credits
Biggest price gainers or losers on Collectr by percent or by amount, for one game or all, cards or sealed, optionally above a minimum price so cheap bulk does not dominate. One row per variant.

**Parameters:**
- `direction` (enum, optional, default "gainers") — Gainers or losers. [one of: gainers, losers]
- `measure` (enum, optional, default "percent") — Rank by percent or by amount. [one of: percent, amount]
- `category` (enum, optional) — Game or collectible category by name (pokemon, magic, yugioh, one_piece, lorcana, …) or Collectr category id. `categories` lists them all. [one of: pokemon, magic, yugioh, one_piece, lorcana, flesh_and_blood, riftbound, dragon_ball_super_fusion_world, dragon_ball_super, dragon_ball_z, digimon, weiss_schwarz, union_arena, star_wars_unlimited, star_wars_destiny, sorcery_contested_realm, grand_archive, final_fantasy_tcg, gundam_card_game, hololive, elestrals, metazoo, palworld, cyberpunk, force_of_will, cardfight_vanguard, shadowverse, gate_ruler, transformers_tcg, universus, wixoss, battle_spirits_saga, funko, marvel, basketball, watches, zerocool]
- `language` (enum, optional) — Card language: en, jp or cn (Pokémon has all three; most games are English only). [one of: en, jp, cn]
- `product_type` (enum, optional, default "all") — Singles, sealed product, or both. [one of: all, cards, sealed]
- `price_min` (number, optional) — Lowest market price, USD (inclusive).
- `price_max` (number, optional) — Highest market price, USD (inclusive). Products with no price yet match a max-only range.
- `page` (integer, optional, default 1) — Page number; Collectr serves 30 rows a page.
- `limit` (integer, optional, default 30) — Rows to return from the page (1-30).
- `currency` (enum, optional, default "USD") — Currency for every price. Collectr publishes USD; other currencies use Collectr's own daily exchange rate (returned as exchange_rate). [one of: USD, CAD, EUR, GBP, AUD, CNY, JPY, KRW, NZD, DKK, NOK, SEK, AED, HKD, SGD, PHP, PLN, MYR, MXN, CHF, TTD, IDR, KWD, SAR, BHD, CZK, CLP, TWD, PEN, VND, THB, ZAR, INR, QAR, BRL, EGP]
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** direction, measure, results[]{product_id, name, category, category_id, category_slug, set_name, set_id, set_slug, card_number, rarity, variant, is_card, product_type (card|sealed_or_other), language (when filtered), market_price (null when the site has no price yet), previous_market_price, price_change, price_change_percent, has_price, graded_prices_available[]{grader, grade, grade_name, grade_id}, image_url, url}, count, page, has_more, currency, filters{}

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

### POST https://api.reefapi.com/collectr/v1/categories — 1 credit
Every game and collectible category Collectr prices (Pokémon, Magic, Yu-Gi-Oh!, One Piece, Lorcana and 30+ more, Funko, Marvel, watches, basketball), with the id and slug the other actions take, whether it has set lists, and the languages and product types the search filters accept.

**Parameters:**
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** categories[]{category_id, slug, name, has_set_lists, image_url, icon_url}, languages[]{code, name}, product_types[], count

### POST https://api.reefapi.com/collectr/v1/grading_scales — 1 credit
The grading companies and grades Collectr prices (PSA, BGS, CGC, TAG, ACE, ARS, AGS) with each grade's id, value and name, which grades Collectr treats as equivalent across companies, and its raw-card condition multipliers (Near Mint, Lightly Played … Damaged).

**Parameters:**
- `max_rotations` (integer, optional, default 3) — How many fresh exits to try before giving up.

**Returns:** graders[]{grader, grades[]{grade_id, grade, grade_name, label}}, equivalent_grades[]{title, grade_ids[]}, conditions[]{code, name, price_multiplier}

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