# Brave Search — Orthogonal API

> Pay-per-use API on Orthogonal. Each call is billed to your Orthogonal balance.
> Base API: `https://api.orthogonal.com/v1/run` · [llms.txt](https://orthogonal.com/llms.txt) · [browse all APIs](https://orthogonal.com/discover)

Brave's independent web search index, built for AI agents: LLM-ready page context for grounding and RAG, plus web, news, image, video and place search with local POI details.

**Verified:** no

## Access

**Run API:** `POST https://api.orthogonal.com/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://orthogonal.com/dashboard/settings/api-keys

Every call goes through the unified Run API: send the API `slug`, the endpoint `path`, and the `query`/`body` parameters. The response is `{ "success": true, "price": "<usd>", "data": { ... } }`.

## Endpoints

### Image Search

Search billions of indexed images. Up to 200 results per request, strict safesearch by default.

`GET /images/search`

**Estimated cost:** $0.006

**Docs:** https://api-dashboard.search.brave.com/api-reference/images/image_search

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query (max 400 chars, 50 words) |
| `country` | string | No | 2-letter country code, or ALL for worldwide (default US) |
| `search_lang` | string | No | Language code for results (default en) |
| `count` | integer | No | Number of images (1-200, default 50) |
| `safesearch` | string | No | off or strict (default strict) |
| `spellcheck` | boolean | No | Spellcheck the query |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"brave-search","path":"/images/search","method":"GET","query":{"q":"<string>","country":"<string>","search_lang":"<string>","count":"<integer>","safesearch":"<string>","spellcheck":"<boolean>"}}'
```

### News Search

Search a dedicated index of news articles with freshness, country and language filters.

`GET /news/search`

**Estimated cost:** $0.006

**Docs:** https://api-dashboard.search.brave.com/api-reference/news/news_search/get

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query (max 400 chars, 50 words) |
| `country` | string | No | 2-letter country code, or ALL for worldwide (default US) |
| `search_lang` | string | No | Language code for results (default en) |
| `ui_lang` | string | No | UI language, e.g. en-US |
| `count` | integer | No | Results per page (1-50, default 20) |
| `offset` | integer | No | Page offset (0-9) |
| `safesearch` | string | No | off, moderate, or strict (default strict) |
| `freshness` | string | No | pd (24h), pw (7d), pm (31d), py (365d), or YYYY-MM-DDtoYYYY-MM-DD |
| `extra_snippets` | boolean | No | Up to 5 extra excerpts per result |
| `spellcheck` | boolean | No | Spellcheck the query |
| `goggles` | string | No | Goggle URL or inline definition for custom re-ranking |
| `operators` | boolean | No | Apply search operators |
| `include_fetch_metadata` | boolean | No | Include fetch metadata for results (default false) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"brave-search","path":"/news/search","method":"GET","query":{"q":"<string>","country":"<string>","search_lang":"<string>","ui_lang":"<string>","count":"<integer>","offset":"<integer>","safesearch":"<string>","freshness":"<string>","extra_snippets":"<boolean>","spellcheck":"<boolean>","goggles":"<string>","operators":"<boolean>","include_fetch_metadata":"<boolean>"}}'
```

### Video Search

Search a dedicated index of videos across platforms with freshness and locale filters.

`GET /videos/search`

**Estimated cost:** $0.006

**Docs:** https://api-dashboard.search.brave.com/api-reference/videos/video_search/get

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query (max 400 chars, 50 words) |
| `country` | string | No | 2-letter country code, or ALL for worldwide (default US) |
| `search_lang` | string | No | Language code for results (default en) |
| `ui_lang` | string | No | UI language, e.g. en-US |
| `count` | integer | No | Results per page (1-50, default 20) |
| `offset` | integer | No | Page offset (0-9) |
| `safesearch` | string | No | off, moderate, or strict (default moderate) |
| `freshness` | string | No | pd (24h), pw (7d), pm (31d), py (365d), or YYYY-MM-DDtoYYYY-MM-DD |
| `spellcheck` | boolean | No | Spellcheck the query |
| `operators` | boolean | No | Apply search operators |
| `include_fetch_metadata` | boolean | No | Include fetch metadata for results (default false) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"brave-search","path":"/videos/search","method":"GET","query":{"q":"<string>","country":"<string>","search_lang":"<string>","ui_lang":"<string>","count":"<integer>","offset":"<integer>","safesearch":"<string>","freshness":"<string>","spellcheck":"<boolean>","operators":"<boolean>","include_fetch_metadata":"<boolean>"}}'
```

### Local POI Descriptions

AI-generated description for a location ID returned in Web Search locations results. One ID per call; IDs expire after ~8 hours.

`GET /local/descriptions`

**Estimated cost:** $0.006

**Docs:** https://api-dashboard.search.brave.com/api-reference/web/poi_descriptions

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ids` | string | Yes | A single location ID from web search locations results (one per call) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"brave-search","path":"/local/descriptions","method":"GET","query":{"ids":"<string>"}}'
```

### Place Search

Find businesses, landmarks and points of interest from an index of 200M+ places, near coordinates or a named location. Returns ratings, hours, address, contact info.

`GET /local/place_search`

**Estimated cost:** $0.006

**Docs:** https://api-dashboard.search.brave.com/api-reference/web/place_search

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | No | What to look for, e.g. coffee shops. Omit to explore general places in the area |
| `latitude` | number | No | Latitude of search center (use with longitude) |
| `longitude` | number | No | Longitude of search center |
| `location` | string | No | Location name alternative to coordinates, e.g. 'san francisco ca united states' or 'tokyo japan' |
| `radius` | number | No | Radius bias in meters |
| `count` | integer | No | Results (1-100, default 20) |
| `country` | string | No | 2-letter country code (ISO 3166-1 alpha-2) to scope the search (default US) |
| `search_lang` | string | No | Language code for results (default en) |
| `ui_lang` | string | No | UI language |
| `units` | string | No | metric or imperial |
| `safesearch` | string | No | off, moderate, or strict (default strict) |
| `spellcheck` | boolean | No | Spellcheck the query |
| `geoloc` | string | No | User position as <lat>x<long> for distance calculation |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"brave-search","path":"/local/place_search","method":"GET","query":{"q":"<string>","latitude":"<number>","longitude":"<number>","location":"<string>","radius":"<number>","count":"<integer>","country":"<string>","search_lang":"<string>","ui_lang":"<string>","units":"<string>","safesearch":"<string>","spellcheck":"<boolean>","geoloc":"<string>"}}'
```

### Local POI Details

Fetch detailed point-of-interest data (address, hours, rating, contact) for a location ID returned in Web Search locations results. One ID per call; IDs expire after ~8 hours.

`GET /local/pois`

**Estimated cost:** $0.006

**Docs:** https://api-dashboard.search.brave.com/api-reference/web/local_pois

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ids` | string | Yes | A single location ID from web search locations results (one per call) |
| `search_lang` | string | No | Language code for results (default en) |
| `ui_lang` | string | No | UI language |
| `units` | string | No | metric or imperial |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"brave-search","path":"/local/pois","method":"GET","query":{"ids":"<string>","search_lang":"<string>","ui_lang":"<string>","units":"<string>"}}'
```

### LLM Context

Web search for AI agents: returns pre-extracted, relevance-ranked page chunks (text, tables, code) plus source metadata, sized to a token budget for LLM grounding and RAG.

`GET /llm/context`

**Estimated cost:** $0.006

**Docs:** https://api-dashboard.search.brave.com/api-reference/ai/llm_context/get

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query (1-600 chars, max 75 words) |
| `country` | string | No | 2-letter country code for results (default US) |
| `search_lang` | string | No | Language code for results (default en) |
| `count` | integer | No | Max search results to consider (1-50, default 20) |
| `freshness` | string | No | pd (24h), pw (7d), pm (31d), py (365d), or YYYY-MM-DDtoYYYY-MM-DD |
| `maximum_number_of_urls` | integer | No | Max URLs in response (1-50, default 20) |
| `maximum_number_of_tokens` | integer | No | Approx max tokens of context (1024-32768, default 8192) |
| `maximum_number_of_snippets` | integer | No | Max snippets across all URLs (1-256) |
| `maximum_number_of_tokens_per_url` | integer | No | Max tokens per URL (512-8192, default 4096) |
| `maximum_number_of_snippets_per_url` | integer | No | Max snippets per URL (1-100) |
| `context_threshold_mode` | string | No | strict, balanced, lenient, or disabled |
| `safesearch` | string | No | off, moderate, or strict. Unset means no filtering (local recall stays strict) |
| `enable_local` | boolean | No | Force local/POI recall |
| `goggles` | string | No | Goggle URL or inline definition for custom re-ranking |
| `enable_source_metadata` | boolean | No | Add site_name, favicon, thumbnail, description to sources |
| `spellcheck` | boolean | No | Spellcheck the query before searching (default true) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"brave-search","path":"/llm/context","method":"GET","query":{"q":"<string>","country":"<string>","search_lang":"<string>","count":"<integer>","freshness":"<string>","maximum_number_of_urls":"<integer>","maximum_number_of_tokens":"<integer>","maximum_number_of_snippets":"<integer>","maximum_number_of_tokens_per_url":"<integer>","maximum_number_of_snippets_per_url":"<integer>","context_threshold_mode":"<string>","safesearch":"<string>","enable_local":"<boolean>","goggles":"<string>","enable_source_metadata":"<boolean>","spellcheck":"<boolean>"}}'
```

### LLM Context (POST)

Same as LLM Context GET but parameters are sent as a JSON body. Useful for long queries or inline Goggles definitions.

`POST /llm/context`

**Estimated cost:** $0.006

**Docs:** https://api-dashboard.search.brave.com/api-reference/ai/llm_context/post

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query (1-600 chars, max 75 words) |
| `country` | string | No | 2-letter country code for results (default US) |
| `search_lang` | string | No | Language code for results (default en) |
| `count` | integer | No | Max search results to consider (1-50, default 20) |
| `freshness` | string | No | pd (24h), pw (7d), pm (31d), py (365d), or YYYY-MM-DDtoYYYY-MM-DD |
| `maximum_number_of_urls` | integer | No | Max URLs in response (1-50, default 20) |
| `maximum_number_of_tokens` | integer | No | Approx max tokens of context (1024-32768, default 8192) |
| `maximum_number_of_snippets` | integer | No | Max snippets across all URLs (1-256) |
| `maximum_number_of_tokens_per_url` | integer | No | Max tokens per URL (512-8192, default 4096) |
| `maximum_number_of_snippets_per_url` | integer | No | Max snippets per URL (1-100) |
| `context_threshold_mode` | string | No | strict, balanced, lenient, or disabled |
| `safesearch` | string | No | off, moderate, or strict. Unset means no filtering (local recall stays strict) |
| `enable_local` | boolean | No | Force local/POI recall |
| `goggles` | string | No | Goggle URL or inline definition for custom re-ranking |
| `enable_source_metadata` | boolean | No | Add site_name, favicon, thumbnail, description to sources |
| `spellcheck` | boolean | No | Spellcheck the query before searching (default true) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"brave-search","path":"/llm/context","body":{"q":"<string>","country":"<string>","search_lang":"<string>","count":"<integer>","freshness":"<string>","maximum_number_of_urls":"<integer>","maximum_number_of_tokens":"<integer>","maximum_number_of_snippets":"<integer>","maximum_number_of_tokens_per_url":"<integer>","maximum_number_of_snippets_per_url":"<integer>","context_threshold_mode":"<string>","safesearch":"<string>","enable_local":"<boolean>","goggles":"<string>","enable_source_metadata":"<boolean>","spellcheck":"<boolean>"}}'
```

### Web Search

Search Brave's independent web index. Returns web results plus news, videos, discussions, FAQ, infobox and locations where relevant.

`GET /web/search`

**Estimated cost:** $0.006

**Docs:** https://api-dashboard.search.brave.com/api-reference/web/search/get

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search query (max 600 chars, 75 words). Supports operators like site:, filetype:, quotes and -exclusions |
| `country` | string | No | 2-letter country code for results (default US) |
| `search_lang` | string | No | Language code for results (default en) |
| `ui_lang` | string | No | UI language, e.g. en-US |
| `count` | integer | No | Web results per page (1-20, default 20) |
| `offset` | integer | No | Page offset (0-9) |
| `safesearch` | string | No | off, moderate, or strict (default moderate) |
| `freshness` | string | No | pd (24h), pw (7d), pm (31d), py (365d), or YYYY-MM-DDtoYYYY-MM-DD |
| `result_filter` | string | No | Comma list of result types: discussions,faq,infobox,news,query,videos,web,locations |
| `extra_snippets` | boolean | No | Up to 5 extra excerpts per result |
| `spellcheck` | boolean | No | Spellcheck the query (default true) |
| `text_decorations` | boolean | No | Include highlight markers in snippets |
| `units` | string | No | metric or imperial |
| `goggles` | string | No | Goggle URL or inline definition for custom re-ranking |
| `operators` | boolean | No | Apply search operators (default true) |
| `include_fetch_metadata` | boolean | No | Include fetch metadata for results (default false) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"brave-search","path":"/web/search","method":"GET","query":{"q":"<string>","country":"<string>","search_lang":"<string>","ui_lang":"<string>","count":"<integer>","offset":"<integer>","safesearch":"<string>","freshness":"<string>","result_filter":"<string>","extra_snippets":"<boolean>","spellcheck":"<boolean>","text_decorations":"<boolean>","units":"<string>","goggles":"<string>","operators":"<boolean>","include_fetch_metadata":"<boolean>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/brave-search
