# Brave Search API — web results, news, images, videos, autocomplete, infobox, discussions, FAQ, local places and related searches from search.brave.com, by country

> Brave web search results for a query, as a searcher in the chosen country sees them. Each organic result: position, title, URL, display path, domain, site name, favicon, snippet, age and ISO date, language, thumbnail, sitelinks and Brave's rich data for that result (article author/publisher, product with offers, rating, movie, recipe, Q&A, FAQ, video, book, software, review). Plus every block on the page: top news, videos, discussions (forum / Reddit threads with votes and answers), FAQ, infobox (knowledge panel with attributes, images and profiles), local places (address, phone, rating, hours, coordinates), recipes, rich answers (e.g. stock quotes), ads and related searches. About 20 results per page, up to 10 pages. Operators ("phrase", -word, site:, filetype:) work.
> ReefAPI engine `brave` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/brave/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/brave/v1/search — 2 credits
Brave web search results for a query, as a searcher in the chosen country sees them. Each organic result: position, title, URL, display path, domain, site name, favicon, snippet, age and ISO date, language, thumbnail, sitelinks and Brave's rich data for that result (article author/publisher, product with offers, rating, movie, recipe, Q&A, FAQ, video, book, software, review). Plus every block on the page: top news, videos, discussions (forum / Reddit threads with votes and answers), FAQ, infobox (knowledge panel with attributes, images and profiles), local places (address, phone, rating, hours, coordinates), recipes, rich answers (e.g. stock quotes), ads and related searches. About 20 results per page, up to 10 pages. Operators ("phrase", -word, site:, filetype:) work.

**Parameters:**
- `q` (string, required) — Search query, exactly as typed into Brave. Operators work: "exact phrase", -exclude, site:example.com, filetype:pdf, OR. 1-400 characters.
- `country` (enum, optional, default "us") — Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide. [one of: all, us, gb, ca, au, nz, in, de, at, ch, fr, be, nl, es, pt, it, dk, fi, no, se, pl, tr, ru, jp, kr, tw, hk, id, my, ph, sa, za, br, mx, ar, cl]
- `page` (integer, optional, default 1) — Result page (1-10); about 20 results each. A page past Brave's last page returns 0 results with `has_more: false`.
- `safesearch` (enum, optional, default "moderate") — Adult-content filter. Brave applies it mainly to images and videos; on web results `strict` removes a few explicit sites, `off` and `moderate` return the same web list. [one of: off, moderate, strict]
- `freshness` (enum, optional) — Only results published in this window: day, week, month, year — or a custom range `YYYY-MM-DDtoYYYY-MM-DD` (e.g. 2024-01-01to2024-01-31). [one of: day, week, month, year]
- `goggles` (string, optional) — Brave Goggle to re-rank results with: the URL of a public .goggle file (Brave's custom ranking rules, e.g. tech blogs only, or a list of preferred domains).

**Returns:** search_information{query, corrected_query, query_was_corrected, more_results_available, no_results, page, results_on_page, search_operators} + organic_results[]{position, title, url, displayed_url, domain, site_name, favicon, snippet, age, date, date_is_estimate, language, type, is_live, thumbnail, sitelinks[]{title, url}, extra_snippets[], article, product, rating, movie, recipe, qa, faq, video, book, software, review, cluster[]} + news_results[] + video_results[] + discussions[]{title, url, forum, votes, answers, top_comment, date} + faq[]{question, answer, url} + infobox{title, description, category, long_description, url, website, attributes[]{label, value, links[]}, images[], profiles[]} + locations[]{title, address, phone, rating, review_count, opening_hours[], latitude, longitude, ...} + recipes[] + rich_answers[] + ads[] + related_searches[]

**Example request body:**
```json
{
  "q": "python asyncio tutorial"
}
```

### POST https://api.reefapi.com/brave/v1/news — 2 credits
Brave News results for a query: title, URL, source, domain, snippet, age and date, thumbnail, live/breaking flags. The first page carries up to 50 articles, later pages about 20.

**Parameters:**
- `q` (string, required) — Search query, exactly as typed into Brave. Operators work: "exact phrase", -exclude, site:example.com, filetype:pdf, OR. 1-400 characters.
- `country` (enum, optional, default "us") — Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide. [one of: all, us, gb, ca, au, nz, in, de, at, ch, fr, be, nl, es, pt, it, dk, fi, no, se, pl, tr, ru, jp, kr, tw, hk, id, my, ph, sa, za, br, mx, ar, cl]
- `page` (integer, optional, default 1) — Result page (1-5); the first page has up to 50 articles. A page past Brave's last page returns 0 results with `has_more: false`.
- `safesearch` (enum, optional, default "moderate") — Adult-content filter. Brave applies it mainly to images and videos; on web results `strict` removes a few explicit sites, `off` and `moderate` return the same web list. [one of: off, moderate, strict]
- `freshness` (enum, optional) — Only results published in this window: day, week, month, year — or a custom range `YYYY-MM-DDtoYYYY-MM-DD` (e.g. 2024-01-01to2024-01-31). [one of: day, week, month, year]

**Returns:** search_information{query, page, results_on_page, no_results, more_results_available} + news_results[]{position, title, url, source, domain, favicon, snippet, age, date, date_is_estimate, is_live, breaking, thumbnail}

**Example request body:**
```json
{
  "q": "climate change"
}
```

### POST https://api.reefapi.com/brave/v1/images — 2 credits
Brave image search: up to about 200 images per call with the full-size image URL, its width and height, a thumbnail, the page it appears on, the source site and a title. `safesearch` filters adult images (default moderate).

**Parameters:**
- `q` (string, required) — Search query, exactly as typed into Brave. Operators work: "exact phrase", -exclude, site:example.com, filetype:pdf, OR. 1-400 characters.
- `country` (enum, optional, default "us") — Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide. [one of: all, us, gb, ca, au, nz, in, de, at, ch, fr, be, nl, es, pt, it, dk, fi, no, se, pl, tr, ru, jp, kr, tw, hk, id, my, ph, sa, za, br, mx, ar, cl]
- `safesearch` (enum, optional, default "moderate") — Adult-content filter. Brave applies it mainly to images and videos; on web results `strict` removes a few explicit sites, `off` and `moderate` return the same web list. [one of: off, moderate, strict]

**Returns:** search_information{query, results_on_page, no_results} + images[]{position, title, page_url, source, image_url, width, height, thumbnail, thumbnail_width, thumbnail_height, confidence, indexed_at}

**Example request body:**
```json
{
  "q": "red panda"
}
```

### POST https://api.reefapi.com/brave/v1/videos — 2 credits
Brave video search: title, URL, duration (and in seconds), views where published, creator, publisher (YouTube, Vimeo, ...), channel name and URL, tags, date and thumbnail. Up to about 50 videos on the first page.

**Parameters:**
- `q` (string, required) — Search query, exactly as typed into Brave. Operators work: "exact phrase", -exclude, site:example.com, filetype:pdf, OR. 1-400 characters.
- `country` (enum, optional, default "us") — Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide. [one of: all, us, gb, ca, au, nz, in, de, at, ch, fr, be, nl, es, pt, it, dk, fi, no, se, pl, tr, ru, jp, kr, tw, hk, id, my, ph, sa, za, br, mx, ar, cl]
- `page` (integer, optional, default 1) — Result page (1-5); the first page has up to about 50 videos. A page past Brave's last page returns 0 results with `has_more: false`.
- `safesearch` (enum, optional, default "moderate") — Adult-content filter. Brave applies it mainly to images and videos; on web results `strict` removes a few explicit sites, `off` and `moderate` return the same web list. [one of: off, moderate, strict]
- `freshness` (enum, optional) — Only results published in this window: day, week, month, year — or a custom range `YYYY-MM-DDtoYYYY-MM-DD` (e.g. 2024-01-01to2024-01-31). [one of: day, week, month, year]

**Returns:** search_information{query, page, results_on_page, no_results, more_results_available} + video_results[]{position, title, url, domain, snippet, duration, duration_seconds, views, creator, publisher, channel{name, url}, tags[], age, date, date_is_estimate, thumbnail}

**Example request body:**
```json
{
  "q": "python tutorial"
}
```

### POST https://api.reefapi.com/brave/v1/suggest — 1 credit
Brave's autocomplete for a partial query: up to about 8 suggestions in the market of the chosen country, including entity suggestions (a person, company or place with a short description and image).

**Parameters:**
- `q` (string, required) — The partial query typed so far (1-200 characters).
- `country` (enum, optional, default "us") — Market to search from (ISO country code). Results are the ones a searcher in that country sees: the request is made from inside the country, because Brave ranks by the searcher's location and only honours its own country setting together with it. `all` = worldwide. [one of: all, us, gb, ca, au, nz, in, de, at, ch, fr, be, nl, es, pt, it, dk, fi, no, se, pl, tr, ru, jp, kr, tw, hk, id, my, ph, sa, za, br, mx, ar, cl]

**Returns:** query + suggestions[]{position, suggestion, is_entity, type, name, description, category, image}

**Example request body:**
```json
{
  "q": "how to"
}
```

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