# Zoom & Buscapé API — Brazilian price comparison: search, every store's offer, cash and instalment prices, price history, reviews

> Keyword search on Zoom / Buscapé (Brazil, BRL). Rows are catalogue products (lowest à vista price, instalment plan, number of stores, best store, rating and review count) and single store offers the site has not matched to a product (`row_type: offer`). Filter by price range, category, brand and store; sort by relevance or price. `facets` lists the categories, brands, stores and spec filters of the result. The source's total stops at 10 000 (`total_capped`).
> ReefAPI engine `zoom-buscape` · 7 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/zoom-buscape/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/zoom-buscape/v1/search — 2 credits
Keyword search on Zoom / Buscapé (Brazil, BRL). Rows are catalogue products (lowest à vista price, instalment plan, number of stores, best store, rating and review count) and single store offers the site has not matched to a product (`row_type: offer`). Filter by price range, category, brand and store; sort by relevance or price. `facets` lists the categories, brands, stores and spec filters of the result. The source's total stops at 10 000 (`total_capped`).

**Parameters:**
- `query` (string, required) — Search words, e.g. `geladeira frost free`, `iphone 15`, `tv 55`.
- `site` (enum, optional, default "buscape") — Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform). [one of: buscape, zoom]
- `sort` (enum, optional, default "relevance") — Result order. [one of: relevance, price_asc, price_desc]
- `page` (integer, optional, default 1) — Result page (1 = first).
- `page_size` (integer, optional, default 36) — Rows asked for per page (the site returns this many or a few fewer: rows it hides, e.g. adult content, are not refilled).
- `price_min` (number, optional) — Lowest price in BRL. The source compares its listing price, which is the à vista price (the row's `price`).
- `price_max` (number, optional) — Highest price in BRL.
- `brand` (string, optional) — Brand name exactly as in `facets.brand[].id` of an earlier call (e.g. `Brastemp`, `Apple`).
- `seller` (string, optional) — Store name as in `facets.seller[].id` (the store with the best price).
- `category_id` (string, optional) — Narrow to one category id from `facets.category[].id` (8 = Geladeira).
- `auto_category` (boolean, optional, default false) — Let the site narrow the search to the category it thinks you mean (`geladeira` → category 8 Geladeira); the chosen one is in `category_suggestion`.

**Returns:** results[]{row_type (product|offer), product_id, offer_id (the id of its own type, other null), title, short_title, url (product rows), clickout_url (offer rows), image, price (à vista, BRL), price_is_from, currency, installments, installment_value, installment_total_price, has_interest, store_count, best_offer{offer_id, seller_id, seller_name}, sellers[]{id, name}, category{category_id, name, slug}, rating, review_count, discount_pct, marketplace, stamps[], popularity_score, position} + count + total + total_capped + pages + page + page_size + has_more + facets{category[], brand[], seller[], marketplace[], price_range{min, max, buckets[]}, attributes[]{name, values[]}} + category_suggestion + query + sort + site

**Example request body:**
```json
{
  "query": "geladeira frost free"
}
```

### POST https://api.reefapi.com/zoom-buscape/v1/category — 2 credits
One Zoom / Buscapé category listing (e.g. 8 = Geladeira, 7 = Celular e Smartphone): the same rows, filters, sort and paging as `search`. Takes the numeric id or the category URL (e.g. https://www.zoom.com.br/geladeira).

**Parameters:**
- `category_id` (string, required) — Numeric category id (`category.category_id` of a row, `category_path[]` of `product`, a facet), or a category page URL.
- `site` (enum, optional, default "buscape") — Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform). [one of: buscape, zoom]
- `sort` (enum, optional, default "relevance") — Result order. [one of: relevance, price_asc, price_desc]
- `page` (integer, optional, default 1) — Result page (1 = first).
- `page_size` (integer, optional, default 36) — Rows asked for per page (the site returns this many or a few fewer: rows it hides, e.g. adult content, are not refilled).
- `price_min` (number, optional) — Lowest price in BRL. The source compares its listing price, which is the à vista price (the row's `price`).
- `price_max` (number, optional) — Highest price in BRL.
- `brand` (string, optional) — Brand name exactly as in `facets.brand[].id` of an earlier call (e.g. `Brastemp`, `Apple`).
- `seller` (string, optional) — Store name as in `facets.seller[].id` (the store with the best price).

**Returns:** results[]{same row shape as search} + count + total + total_capped + pages + page + page_size + has_more + facets + category{category_id, url} + sort + site

**Example request body:**
```json
{
  "category_id": "8"
}
```

### POST https://api.reefapi.com/zoom-buscape/v1/product — 3 credits
One product on Zoom / Buscapé: title, brand, description, category path, images, the full spec sheet, lowest and highest à vista price, number of offers and stores, the best offer (store, à vista price, instalment plan), the user rating and review count, the popularity rank in its category, the site's tags and the editorial review (pros, cons, summary, author).

**Parameters:**
- `product_id` (string, required) — Product id: `product_id` of a search / category row, or a product page URL from zoom.com.br / buscape.com.br (resolved to its id).
- `site` (enum, optional, default "buscape") — Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform). [one of: buscape, zoom]

**Returns:** product{row_type, product_id, title, url, brand, line, status, created_at, description, category{category_id, name, slug}, category_path[], images[], price_min, price_max, currency, offer_count, store_count, best_offer{offer_id, title, price, installment_total_price, installments, installment_value, condition, seller{id, name, logo, is_marketplace}}, rating, review_count, external_reviews_url, popularity_rank_in_category, tags[], specs[]{group, name, value}, expert_review{title, summary, pros[], cons[], author, rating, date}}

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

### POST https://api.reefapi.com/zoom-buscape/v1/offers — 1 credit
Every store's offer for one product: store (id, name, logo, marketplace), offer title, condition (new / used), cross-border, à vista price, instalment plan (number, value, total, with or without interest), discount, stock where the store publishes it. Sort like the site: default, cheapest à vista, priciest, cheapest instalment total, biggest discount. No shipping cost: the site only computes it after a postcode is entered.

**Parameters:**
- `product_id` (string, required) — Product id: `product_id` of a search / category row, or a product page URL from zoom.com.br / buscape.com.br (resolved to its id).
- `site` (enum, optional, default "buscape") — Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform). [one of: buscape, zoom]
- `sort` (enum, optional, default "price_asc") — Offer order. [one of: price_asc, default, price_desc, installment_total_asc, discount_desc]
- `page` (integer, optional, default 1) — Offer page (1 = first).
- `page_size` (integer, optional, default 50) — Offers per page.

**Returns:** product_id + offers[]{position, offer_id, product_id, sku_id, title, image, seller{id, name, logo, is_marketplace}, condition (new|used), cross_border, price (à vista), currency, installment_total_price, installments, installment_value, has_interest, installment_plans[]{months, value, total}, discount_pct, competitiveness_index, stock, sku_variations[]} + count + total + store_count + page + page_size + has_more + cheapest_price + cheapest_installment_total + best_offer + sort

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

### POST https://api.reefapi.com/zoom-buscape/v1/offer — 1 credit
One single store offer (`row_type: offer` rows of search / category, or any `offer_id`): title, store, à vista price, list price, instalment plan, image and the site's cashback on it.

**Parameters:**
- `offer_id` (string, required) — `offer_id` of a search / category row with row_type offer, or of an `offers` row.
- `site` (enum, optional, default "buscape") — Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform). [one of: buscape, zoom]

**Returns:** offer{row_type=offer, offer_id, title, image, seller{id, name, logo, is_marketplace}, price, list_price, currency, installments, installment_value, installment_total_price, installment_plans[], cashback_value, cashback_rate, clickout_url}

**Example request body:**
```json
{
  "offer_id": "1400182309"
}
```

### POST https://api.reefapi.com/zoom-buscape/v1/price_history — 2 credits
The site's own price history for one product: the lowest à vista price on every day and which store had it, for the last 40 days or 3 / 6 / 12 months, with the lowest, highest, median and last price of the period. Every point is checked to belong to the requested product. Today's point is the day's lowest so far and can be below the cheapest offer at the moment of the call (measured once in 22).

**Parameters:**
- `product_id` (string, required) — Product id: `product_id` of a search / category row, or a product page URL from zoom.com.br / buscape.com.br (resolved to its id).
- `period` (enum, optional, default "40d") — How far back. [one of: 40d, 3m, 6m, 12m]
- `site` (enum, optional, default "buscape") — Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform). [one of: buscape, zoom]

**Returns:** product_id + period + currency + points[]{date, price, seller_id} + count + first_date + last_date + lowest{date, price} + highest{date, price} + median + last_price + identity{product_id, points_checked}

**Example request body:**
```json
{
  "product_id": "12534144",
  "period": "3m"
}
```

### POST https://api.reefapi.com/zoom-buscape/v1/reviews — 1 credit
The user-review block of one product: average rating, review count, and the reviews the site shows (up to 10, each with title, text, stars, author first name, date, likes). For most products these are the linked store's reviews (often Amazon's), with the link to all of them in `external_reviews_url`.

**Parameters:**
- `product_id` (string, required) — Product id: `product_id` of a search / category row, or a product page URL from zoom.com.br / buscape.com.br (resolved to its id).
- `site` (enum, optional, default "buscape") — Which site's links, editorial text and search ranking to use. Prices, offers and price history are the same on both (one platform). [one of: buscape, zoom]

**Returns:** product_id + rating + review_count + external_reviews_url + reviews[]{title, text, rating, author, date, positive, likes, dislikes, from_external_store, offer_id, seller_id} + count

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

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