# MPB API — live used photo and video gear from mpb.com, the managed second-hand marketplace for cameras, lenses and cine kit in the UK, the US and Europe. MPB buys, inspects, grades and warranties every item itself, so each listing is one physical camera with one cosmetic grade, one shutter / hour / battery-charge count, its own list of what is in the box and its own price. Search or browse ~20,000 live UK, ~34,000 US and ~35,000 EU items by brand, category, gear type, lens mount, MPB's own condition grade and price, roll them up per model with a live price band, or pull one item's full record: MPB's written definition of its grade, the per-item inspection notes, the full spec sheet, every photo and the other graded copies of the same model that are in stock. No login, no API key.

> Search or browse one MPB storefront at ITEM level - every row is a specific physical camera, lens or accessory MPB has in stock, with MPB's own cosmetic grade, that item's shutter / hour / battery-charge count, what is in the box with it, its price and the direct product URL. Pass `query`, or any combination of `brand` / `category` / `product_type` / `lens_mount` / `condition` / `price_min` / `price_max`, or nothing at all to walk the whole catalogue. `meta.total_results` is MPB's own exact match count for the request, so a filter that bites and a filter that is ignored are told apart without guessing. NOTE the price in a search row comes from MPB's search index: on 24 items checked against the product page on 2026-10-07, 23 agreed and one was 250.00 EUR stale - call `product` when the exact live price matters.
> ReefAPI engine `mpb` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/mpb/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/mpb/v1/search — 2 credits
Search or browse one MPB storefront at ITEM level - every row is a specific physical camera, lens or accessory MPB has in stock, with MPB's own cosmetic grade, that item's shutter / hour / battery-charge count, what is in the box with it, its price and the direct product URL. Pass `query`, or any combination of `brand` / `category` / `product_type` / `lens_mount` / `condition` / `price_min` / `price_max`, or nothing at all to walk the whole catalogue. `meta.total_results` is MPB's own exact match count for the request, so a filter that bites and a filter that is ignored are told apart without guessing. NOTE the price in a search row comes from MPB's search index: on 24 items checked against the product page on 2026-10-07, 23 agreed and one was 250.00 EUR stale - call `product` when the exact live price matters.

**Parameters:**
- `query` (string, optional) — Free-text keyword over MPB's catalogue (model, brand, lens, accessory). MPB's matching is exact enough to report a miss: the nonsense keyword 'zzqqxxnotathingqq' returned 0 results on 2026-10-07, so an empty answer here means empty, not broken. Combine it with the filters below to narrow further.
- `market` (enum, optional, default "UK") — Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency. [one of: UK, US, EU, DE, AT, FR, FR-BE, NL, NL-BE, IT, ES, PT, IE]
- `brand` (array, optional) — One or more brands as MPB spells them (Canon, Nikon, Sony, Fujifilm, Leica, Panasonic, Sigma, DJI, Hasselblad, Zeiss, MPB...). Several values are OR-ed. Measured on the UK catalogue 2026-10-07: unfiltered 19,839 items, brand=Canon 4,872, brand=Canon,Nikon 7,753. The live list with counts is the `facets` action. Values are the English ones in every market.
- `category` (array, optional) — One or more of MPB's own categories ('DSLR lenses', 'Mirrorless cameras', 'Canon RF fit lenses', 'Batteries & chargers', 'Tripods & supports'...). 132 of them were live in the UK catalogue on 2026-10-07; call `facets` for the list with counts. Measured: unfiltered 19,839 -> category='DSLR lenses' 4,949.
- `product_type` (array, optional) — MPB's own gear class, a finer cut than `category`: 'Pro DSLR', 'Prosumer Mirrorless', 'Prime Lens', 'Telephoto Zoom', 'Cine Lens', 'Drone', 'Flashgun', 'Camcorder - Hour Count'... 58 were live in the UK catalogue on 2026-10-07. Measured: unfiltered 19,839 -> product_type='Prime Lens' 1,784.
- `lens_mount` (array, optional) — The lens bayonet, as MPB names it: Canon EF, Canon EF-S, Canon EF-M, Canon RF, Canon FD, Nikon FX, Nikon DX, Nikon Z, Nikon 1, Sony E, Sony A, Fujifilm X, Fujifilm G, Micro Four Thirds, Leica L, Leica M, Leica S, Pentax K, Sigma SA, PL, Hasselblad X, Hasselblad H, Phase One / Mamiya 645. Measured: unfiltered 19,839 -> lens_mount='Canon EF' 2,641, and inside Prosumer Mirrorless (920) it correctly collapses to 0 because no mirrorless BODY carries an EF mount.
- `condition` (array, optional) — MPB's own cosmetic grade. MPB inspects and grades every item itself, so this is the field that makes the listing: like_new (its star rating 5), excellent (4), good (3), well_used (2), heavily_used (1), new (6) and spares_or_repairs (0). Several values are OR-ed. Spares-and-repairs stock is EXCLUDED unless you ask for it by name - that is what MPB's own storefront does. Measured on the UK catalogue 2026-10-07: like_new 3,454, excellent 9,495, good 5,936, well_used 728, heavily_used 56, new 170. [one of: like_new, excellent, good, well_used, heavily_used, new, spares_or_repairs]
- `price_min` (number, optional) — Lowest price to return, in the market's own currency (GBP for UK, USD for US, EUR for every European storefront) as a decimal, e.g. 249.99. Measured on the UK catalogue: unfiltered 19,839 -> price_max=200 9,237, price_min=1000 2,327.
- `price_max` (number, optional) — Highest price to return, same currency rule as `price_min`.
- `sort` (enum, optional) — Result order. Left out, MPB returns its own relevance order. Measured: price_asc first row 1.00 GBP, price_desc first row 14,119.00 GBP on the same UK catalogue, so the ends are real. [one of: price_asc, price_desc, newest, first_listed]
- `page` (integer, optional, default 1) — Result page, 1-based. Deep paging is honest here: asking past the end returns an empty page rather than repeating the last one (measured at start=19,840 on a 19,839-item catalogue). `meta.total_results` is MPB's own exact match count and `meta.pagination.has_more` says whether another page exists.
- `page_size` (integer, optional, default 24) — Rows per page, 1-100 (default 24). MPB's service itself accepts far more but each row carries images and accessory lists, so this engine caps it to keep one call predictable.
- `include_pii` (boolean, optional, default false) — Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.

**Returns:** products[]{product_id, sku, url, model_id, model_name, model_name_localized, model_slug, brand, category, category_localized, product_type, product_type_localized, lens_mount[], condition, condition_label, condition_rank, price, price_was, price_reduction, currency, market, shutter_count, hour_count, battery_charge_count, included_accessories[], images[], first_listed, last_seen, year_of_release, weight_grams, model_available_new, model_new_price} + meta{total_results, market, catalog, currency, page, page_size, pagination, filters_applied}}

**Example request body:**
```json
{
  "query": "canon eos r6",
  "market": "UK",
  "sort": "price_asc"
}
```

### POST https://api.reefapi.com/mpb/v1/models — 1 credit
The same search, rolled up ONE ROW PER MODEL instead of one row per item: how many graded copies MPB currently holds and the live price band (cheapest to dearest) for that model in that market. This is the question a flat listing cannot answer - 'which Canon RF primes does MPB have in stock right now and from what price'. Takes every filter `search` takes. Measured 2026-10-07: the UK catalogue's 19,839 live items roll up to 3,866 models.

**Parameters:**
- `query` (string, optional) — Free-text keyword over MPB's catalogue (model, brand, lens, accessory). MPB's matching is exact enough to report a miss: the nonsense keyword 'zzqqxxnotathingqq' returned 0 results on 2026-10-07, so an empty answer here means empty, not broken. Combine it with the filters below to narrow further.
- `market` (enum, optional, default "UK") — Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency. [one of: UK, US, EU, DE, AT, FR, FR-BE, NL, NL-BE, IT, ES, PT, IE]
- `brand` (array, optional) — One or more brands as MPB spells them (Canon, Nikon, Sony, Fujifilm, Leica, Panasonic, Sigma, DJI, Hasselblad, Zeiss, MPB...). Several values are OR-ed. Measured on the UK catalogue 2026-10-07: unfiltered 19,839 items, brand=Canon 4,872, brand=Canon,Nikon 7,753. The live list with counts is the `facets` action. Values are the English ones in every market.
- `category` (array, optional) — One or more of MPB's own categories ('DSLR lenses', 'Mirrorless cameras', 'Canon RF fit lenses', 'Batteries & chargers', 'Tripods & supports'...). 132 of them were live in the UK catalogue on 2026-10-07; call `facets` for the list with counts. Measured: unfiltered 19,839 -> category='DSLR lenses' 4,949.
- `product_type` (array, optional) — MPB's own gear class, a finer cut than `category`: 'Pro DSLR', 'Prosumer Mirrorless', 'Prime Lens', 'Telephoto Zoom', 'Cine Lens', 'Drone', 'Flashgun', 'Camcorder - Hour Count'... 58 were live in the UK catalogue on 2026-10-07. Measured: unfiltered 19,839 -> product_type='Prime Lens' 1,784.
- `lens_mount` (array, optional) — The lens bayonet, as MPB names it: Canon EF, Canon EF-S, Canon EF-M, Canon RF, Canon FD, Nikon FX, Nikon DX, Nikon Z, Nikon 1, Sony E, Sony A, Fujifilm X, Fujifilm G, Micro Four Thirds, Leica L, Leica M, Leica S, Pentax K, Sigma SA, PL, Hasselblad X, Hasselblad H, Phase One / Mamiya 645. Measured: unfiltered 19,839 -> lens_mount='Canon EF' 2,641, and inside Prosumer Mirrorless (920) it correctly collapses to 0 because no mirrorless BODY carries an EF mount.
- `condition` (array, optional) — MPB's own cosmetic grade. MPB inspects and grades every item itself, so this is the field that makes the listing: like_new (its star rating 5), excellent (4), good (3), well_used (2), heavily_used (1), new (6) and spares_or_repairs (0). Several values are OR-ed. Spares-and-repairs stock is EXCLUDED unless you ask for it by name - that is what MPB's own storefront does. Measured on the UK catalogue 2026-10-07: like_new 3,454, excellent 9,495, good 5,936, well_used 728, heavily_used 56, new 170. [one of: like_new, excellent, good, well_used, heavily_used, new, spares_or_repairs]
- `price_min` (number, optional) — Lowest price to return, in the market's own currency (GBP for UK, USD for US, EUR for every European storefront) as a decimal, e.g. 249.99. Measured on the UK catalogue: unfiltered 19,839 -> price_max=200 9,237, price_min=1000 2,327.
- `price_max` (number, optional) — Highest price to return, same currency rule as `price_min`.
- `page` (integer, optional, default 1) — Result page, 1-based. Deep paging is honest here: asking past the end returns an empty page rather than repeating the last one (measured at start=19,840 on a 19,839-item catalogue). `meta.total_results` is MPB's own exact match count and `meta.pagination.has_more` says whether another page exists.
- `page_size` (integer, optional, default 24) — Rows per page, 1-100 (default 24). MPB's service itself accepts far more but each row carries images and accessory lists, so this engine caps it to keep one call predictable.
- `include_pii` (boolean, optional, default false) — Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.

**Returns:** models[]{model_id, model_name, model_name_localized, model_slug, url, brand, category, category_localized, product_type, lens_mount[], in_stock_count, price_min, price_max, currency, images[], model_available_new} + meta{total_results, market, catalog, currency, pagination}

**Example request body:**
```json
{
  "market": "US",
  "brand": "Nikon",
  "product_type": "Prime Lens"
}
```

### POST https://api.reefapi.com/mpb/v1/product — 3 credits
The complete record of ONE item by its `sku`, read off the product page a buyer sees. Adds everything a search row cannot carry: MPB's written definition of the grade this item carries, the per-item inspection notes MPB publishes when it found something (a worn grip, corrosion on the hot shoe, a mark on the sensor filter - each with MPB's own code, title and explanation), the full accessory checklist with a present/absent flag per accessory, the shutter / hour / battery-charge count and firmware, the model's full spec sheet, every photo, and the other graded copies of the same model in stock with their prices. Pass `slug` alongside `sku` (both come from one `search` row) to answer in a single upstream request. A sku that is not live in this market answers NOT_FOUND - MPB's own URL quietly falls back to the model page there, and this engine does not pass that off as a result.

**Parameters:**
- `sku` (string, required) — MPB's own stock number for ONE physical item - the number printed at the end of a product URL (/product/<model>/sku-4168605) and returned as `sku` by `search`. A sku that is no longer live answers NOT_FOUND, never an empty success.
- `slug` (string, optional) — The model segment of the product URL, e.g. `canon-eos-r6`. Optional: pass it together with `sku` (both come from the same `search` row) and the engine reads the product page directly; leave it out and the engine resolves it first, which costs one extra upstream request.
- `market` (enum, optional, default "UK") — Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency. [one of: UK, US, EU, DE, AT, FR, FR-BE, NL, NL-BE, IT, ES, PT, IE]
- `include_pii` (boolean, optional, default false) — Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.

**Returns:** product{product_id, sku, url, model_id, model_name, model_slug, model_url, brand, brand_id, product_type, condition, condition_label, condition_rank, condition_description, observations[]{code, tier_code, area, title, summary, detail}, price, price_was, discount, discount_is_percentage, currency, market, is_sold, state, shutter_count, hour_count, battery_charge_count, firmware, attributes{}, included_accessories[]{id, name, present, essential, core}, included_accessories_present, images[], description, custom_description, specs[]{name, value, type}, breadcrumbs[], model_stock{in_stock_count, price_min, price_max}, other_stock[]{product_id, sku, price, condition, condition_label, condition_rank, is_this_item, url, image}, price_printed, price_second_witness, price_mismatch} + meta{market, currency}

**Example request body:**
```json
{
  "sku": "4168605"
}
```

### POST https://api.reefapi.com/mpb/v1/model — 2 credits
One MODEL and everything MPB has of it: the model record with its full spec sheet, the accessories MPB expects in the box for that model, and every live graded copy in that market with its sku, grade, usage count and price - sorted cheapest first, so the grade-to-price ladder for that camera is one call. Pass `model_id` or `slug`.

**Parameters:**
- `model_id` (integer, optional) — MPB's own model id, returned by `search`, `models` and `product`. Pass this OR `slug` - one of the two is required by `model`.
- `slug` (string, optional) — The model segment of the product URL, e.g. `canon-eos-r6`. Optional: pass it together with `sku` (both come from the same `search` row) and the engine reads the product page directly; leave it out and the engine resolves it first, which costs one extra upstream request.
- `market` (enum, optional, default "UK") — Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency. [one of: UK, US, EU, DE, AT, FR, FR-BE, NL, NL-BE, IT, ES, PT, IE]
- `condition` (array, optional) — MPB's own cosmetic grade. MPB inspects and grades every item itself, so this is the field that makes the listing: like_new (its star rating 5), excellent (4), good (3), well_used (2), heavily_used (1), new (6) and spares_or_repairs (0). Several values are OR-ed. Spares-and-repairs stock is EXCLUDED unless you ask for it by name - that is what MPB's own storefront does. Measured on the UK catalogue 2026-10-07: like_new 3,454, excellent 9,495, good 5,936, well_used 728, heavily_used 56, new 170. [one of: like_new, excellent, good, well_used, heavily_used, new, spares_or_repairs]
- `include_pii` (boolean, optional, default false) — Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.

**Returns:** model{model_id, model_name, model_slug, url, brand, brand_id, product_type, description, legend, key_features[], specs[]{name, value, type}, images[], min_online_price, new_price, expected_accessories[], bonus_accessories[], slugs_by_market{}} + stock[]{product_id, sku, url, model_id, model_name, model_name_localized, model_slug, brand, category, category_localized, product_type, product_type_localized, lens_mount[], condition, condition_label, condition_rank, price, price_was, price_reduction, currency, market, shutter_count, hour_count, battery_charge_count, included_accessories[], images[], first_listed, last_seen, year_of_release, weight_grams, model_available_new, model_new_price} + meta{in_stock_count, price_min, price_max, market, catalog, currency}}

**Example request body:**
```json
{
  "slug": "canon-eos-r6",
  "market": "UK"
}
```

### POST https://api.reefapi.com/mpb/v1/facets — 1 credit
The live filter taxonomy of one MPB market: every brand, category, gear type, lens mount and condition grade that actually has stock right now, each with MPB's own count. This is how you discover the exact value to pass to `search` instead of guessing it - and the counts alone answer 'how much Canon glass does MPB hold in the US today'. Accepts the same filters as `search`, so you can ask for the taxonomy INSIDE a scope (the lens mounts available under Fujifilm, say).

**Parameters:**
- `market` (enum, optional, default "UK") — Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency. [one of: UK, US, EU, DE, AT, FR, FR-BE, NL, NL-BE, IT, ES, PT, IE]
- `facets` (array, optional) — Which filter taxonomies to return with their live counts. Default: brand, category, product_type, lens_mount, condition. Every value here is a filter you can then pass to `search`. [one of: brand, category, product_type, lens_mount, condition, sensor_format, camera_type, year_of_release]
- `query` (string, optional) — Free-text keyword over MPB's catalogue (model, brand, lens, accessory). MPB's matching is exact enough to report a miss: the nonsense keyword 'zzqqxxnotathingqq' returned 0 results on 2026-10-07, so an empty answer here means empty, not broken. Combine it with the filters below to narrow further.
- `brand` (array, optional) — One or more brands as MPB spells them (Canon, Nikon, Sony, Fujifilm, Leica, Panasonic, Sigma, DJI, Hasselblad, Zeiss, MPB...). Several values are OR-ed. Measured on the UK catalogue 2026-10-07: unfiltered 19,839 items, brand=Canon 4,872, brand=Canon,Nikon 7,753. The live list with counts is the `facets` action. Values are the English ones in every market.
- `category` (array, optional) — One or more of MPB's own categories ('DSLR lenses', 'Mirrorless cameras', 'Canon RF fit lenses', 'Batteries & chargers', 'Tripods & supports'...). 132 of them were live in the UK catalogue on 2026-10-07; call `facets` for the list with counts. Measured: unfiltered 19,839 -> category='DSLR lenses' 4,949.
- `product_type` (array, optional) — MPB's own gear class, a finer cut than `category`: 'Pro DSLR', 'Prosumer Mirrorless', 'Prime Lens', 'Telephoto Zoom', 'Cine Lens', 'Drone', 'Flashgun', 'Camcorder - Hour Count'... 58 were live in the UK catalogue on 2026-10-07. Measured: unfiltered 19,839 -> product_type='Prime Lens' 1,784.
- `lens_mount` (array, optional) — The lens bayonet, as MPB names it: Canon EF, Canon EF-S, Canon EF-M, Canon RF, Canon FD, Nikon FX, Nikon DX, Nikon Z, Nikon 1, Sony E, Sony A, Fujifilm X, Fujifilm G, Micro Four Thirds, Leica L, Leica M, Leica S, Pentax K, Sigma SA, PL, Hasselblad X, Hasselblad H, Phase One / Mamiya 645. Measured: unfiltered 19,839 -> lens_mount='Canon EF' 2,641, and inside Prosumer Mirrorless (920) it correctly collapses to 0 because no mirrorless BODY carries an EF mount.
- `condition` (array, optional) — MPB's own cosmetic grade. MPB inspects and grades every item itself, so this is the field that makes the listing: like_new (its star rating 5), excellent (4), good (3), well_used (2), heavily_used (1), new (6) and spares_or_repairs (0). Several values are OR-ed. Spares-and-repairs stock is EXCLUDED unless you ask for it by name - that is what MPB's own storefront does. Measured on the UK catalogue 2026-10-07: like_new 3,454, excellent 9,495, good 5,936, well_used 728, heavily_used 56, new 170. [one of: like_new, excellent, good, well_used, heavily_used, new, spares_or_repairs]
- `price_min` (number, optional) — Lowest price to return, in the market's own currency (GBP for UK, USD for US, EUR for every European storefront) as a decimal, e.g. 249.99. Measured on the UK catalogue: unfiltered 19,839 -> price_max=200 9,237, price_min=1000 2,327.
- `price_max` (number, optional) — Highest price to return, same currency rule as `price_min`.
- `include_pii` (boolean, optional, default false) — Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.

**Returns:** facets[]{filter, index_field, label, value_count, values[]{value, label, rank, count}} + meta{total_results, market, catalog, currency}

**Example request body:**
```json
{
  "market": "UK",
  "facets": "brand,category,condition"
}
```

### POST https://api.reefapi.com/mpb/v1/suggest — 1 credit
MPB's own model autocomplete: turn a half-typed camera or lens name into the model names MPB actually carries. One tiny request (under 1 KB measured), meant to be called before `search` so a keyword lands on a real model.

**Parameters:**
- `query` (string, required) — A partial model name. Returns MPB's own fuzzy model suggestions, which is how its own search box resolves a half-typed camera name into a model MPB stocks.
- `market` (enum, optional, default "UK") — Which MPB storefront to read. MPB runs THREE catalogues behind thirteen storefronts, measured live on 2026-10-07: UK (GBP, 19,841 live items), US (USD, 34,197) and EU (EUR, 34,962). DE, FR, IT, ES, PT, NL, AT, IE and both Belgian storefronts all read that one EU catalogue and the same EUR price list - they differ in language and in the product page they link to, not in stock. Every response echoes the market, the catalogue it really read and the currency. [one of: UK, US, EU, DE, AT, FR, FR-BE, NL, NL-BE, IT, ES, PT, IE]
- `count` (integer, optional, default 10) — How many suggestions to return (1-50, default 10).
- `include_pii` (boolean, optional, default false) — Standard gateway control. MPB is the seller of every item it lists, so no personal data appears on the surface this engine reads and this flag changes nothing in the response.

**Returns:** suggestions[]{term, weight} + meta{market, count}

**Example request body:**
```json
{
  "query": "canon eos",
  "market": "UK",
  "count": 10
}
```

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