[ Web Proxy ]
URL:
Viewing: https://brave.com/ai/ [Back]  [Original]

Brave AI | Brave

Brave AI

Brave AI means private, user-first AI. It can help you answer questions and discover new info; automate and complete tasks; and power your own AI experiences. Use Brave AI to find, do, and build almost anything online.

Find anything, with Ask Brave

Looking for something? Got a simple question or a deep research task? Try Ask Brave, the AI chat built into Brave Search.

Brave Search is the worlds most complete non-Big Tech search engine, and the only independent search with privacy at its core. The Ask feature synthesizes content from billions of webpages to create AI-powered answers, right in the search results page.

Brave Search answers more than 50 million user queries per day. With about of those queries triggering an AI summary, Brave Search is by volume the most widely used answer engine in the world.

Try Brave Search with AI...:

Use cases:

  • Synthesize content from multiple webpages in a single, concise answer
  • Get summaries about people and places, news and sports, coding, research, and more

Differentiators:

  • Private, accurate AI-powered answers, right in the SERP
  • Very low latency, no profiling
  • Always cites its sources
  • Free of Big Tech
  • Available on desktop & mobile
Try AI in Brave Search

Create content & complete tasks, with Brave Leo

Leo is Brave’s smart, privacy-first AI assistant, built right into the browser.

Brave Leo makes every webpage interactive. Summarize pages youre reading or videos youre watching; analyze spreadsheets, docs, and PDFs, videos; translate content, or even create new content.

Leo doesnt retain or share chats, or use them for model training. No account or login is required.

Choose from pre-installed models, including the latest from Claude, DeepSeek, Gemma, Llama, and Qwen. Or bring your own models.

Use cases:

  • Analyze webpages, PDFs, images, Google Docs and Sheets, and more
  • Generate new content
  • Summarize multiple open webpages and tabs in the same chat
  • Translate content

Differentiators:

  • Private
  • Available right in the browser
  • No account or login required
  • Available on desktop & mobile

This table examines default configurations on individual, non-enterprise accounts/plans.

  Retains chats on servers Trains models on user chats Retains user IP address in chat requests
Brave Leo [Brave Leo] Brave Leo No No No
Duck.ai [Duck.ai] Duck.ai Yes1 No No
Perplexity Comet [Perplexity Comet] Perplexity Comet Yes Yes Yes
Google Gemini [Google Gemini] Google Gemini Yes2 Yes Yes
OpenAI ChatGPT [OpenAI ChatGPT] OpenAI ChatGPT Yes Yes Yes
Microsoft Copilot [Microsoft Copilot] Microsoft Copilot Yes3 Yes Yes
Learn more about Brave Leo

Power your own AI with the Brave Search API

Power your AI with the world’s largest Web search API. Create search tools, train foundational models, build chatbots, and more.

Brave Search is the world’s most complete non-Big Tech search engine. It has an index of over 30 billion pages, with millions of new pages indexed each day. This real-time, well-structured data is available at affordable CPM.

Features multiple endpoints across Web, AI grounding, image & video, news, suggest, and spellcheck.

Use cases:

  • LLM context
  • Give chatbots and agents access to real-time data
  • Train foundational models
  • RAG pipelines
  • MCP use cases
  • Build search-enabled tools like CRMs

Differentiators:

  • Powered by an independent index of over 35 billion pages
  • Not a scraper or aggregator
  • Refreshed daily for real-time results
  • Transparent, affordable pricing
  • Consistent data structuring
  • Trusted by some of the biggest names in AI in search
Web LLM Context Answers Image Video News Suggest Spellcheck
Python cURL JavaScript GO
 1#!/usr/bin/env python
 2
 3import requests
 4
 5print(
 6    requests.get(
 7        "https://api.search.brave.com/res/v1/web/search",
 8        headers={
 9            "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
10        },
11        params={
12            "q": "greek restaurants in san francisco",
13            "count": 20,
14            "country": "us",
15            "search_lang": "en",
16        },
17    ).json()
18)
1curl -s --compressed "https://api.search.brave.com/res/v1/web/search?q=greek+restaurants+in+san+francisco" \
2  -H "Accept: application/json" \
3  -H "Accept-Encoding: gzip" \
4  -H "X-Subscription-Token: <YOUR_API_KEY>"
 1#!/usr/bin/env node
 2
 3fetch(
 4  `https://api.search.brave.com/res/v1/web/search?${new URLSearchParams({
 5    q: "greek restaurants in san francisco",
 6    count: 10,
 7    country: "us",
 8    search_lang: "en",
 9  })}`,
10  {
11    headers: {
12      "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
13    },
14  },
15)
16  .then((response) => response.json())
17  .then((data) => console.log(data));
 1package main
 2
 3import (
 4	"fmt"
 5	"io"
 6	"net/http"
 7	"net/url"
 8)
 9
10func main() {
11	u, _ := url.Parse("https://api.search.brave.com/res/v1/web/search")
12	q := u.Query()
13	q.Set("q", "greek restaurants in san francisco")
14	q.Set("count", "10")
15	q.Set("country", "us")
16	q.Set("search_lang", "en")
17	u.RawQuery = q.Encode()
18
19	req, _ := http.NewRequest("GET", u.String(), nil)
20	req.Header.Set("X-Subscription-Token", "<BRAVE_SEARCH_API_KEY>")
21
22	resp, _ := http.DefaultClient.Do(req)
23	defer resp.Body.Close()
24
25	body, _ := io.ReadAll(resp.Body)
26	fmt.Println(string(body))
27}
JSON
 1{
 2    "type": "search",
 3    "web": {
 4        "type": "search",
 5        "results": [
 6            {
 7                "title": "THE 10 BEST Greek Restaurants in San Francisco (Updated 2025)",
 8                "url": "https://www.tripadvisor.com/Restaurants-g60713-c23-San_Francisco_California.html",
 9                "is_source_local": false,
10                "is_source_both": false,
11                "description": "Best <strong>Greek</strong> <strong>Restaurants</strong> <strong>in</strong> <strong>San</strong> <strong>Francisco</strong>, California: Find Tripadvisor traveller reviews of <strong>San</strong> <strong>Francisco</strong> <strong>Greek</strong> <strong>restaurants</strong> and search by price, location, and more.",
12                "profile": {
13                    "name": "Tripadvisor",
14                    "url": "https://www.tripadvisor.com/Restaurants-g60713-c23-San_Francisco_California.html",
15                    "long_name": "tripadvisor.com",
16                    "img": "https://imgs.search.brave.com/OEuNbeVBPVl2AlxDmpKDNcYk4RuERMK4gTlMyVzbpSw/rs:fit:32:32:1:0/g:ce/aHR0cDovL2Zhdmlj/b25zLnNlYXJjaC5i/cmF2ZS5jb20vaWNv/bnMvZjQ1MjliOWZi/NmMxZWRhYmY2MmYy/MmNjMmM0ZWM3MTA4/ZTUxM2E1M2JlMzgx/ODM0N2E2NzY5OTJk/YjQwNmNlNi93d3cu/dHJpcGFkdmlzb3Iu/Y29tLw"
17                }
Python cURL JavaScript GO
 1#!/usr/bin/env python
 2
 3import requests
 4
 5print(
 6    requests.get(
 7        "https://api.search.brave.com/res/v1/llm/context",
 8        headers={
 9            "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
10        },
11        params={
12            "q": "what is tallest mountain in solar system",
13        },
14    ).json()
15)
1curl -s --compressed "https://api.search.brave.com/res/v1/llm/context?q=what+is+tallest+mountain+in+solar+system" \
2  -H "Accept: application/json" \
3  -H "Accept-Encoding: gzip" \
4  -H "X-Subscription-Token: <YOUR_API_KEY>"
 1#!/usr/bin/env node
 2
 3fetch(
 4  `https://api.search.brave.com/res/v1/llm/context?${new URLSearchParams({
 5    q: "what is tallest mountain in solar system",
 6  })}`,
 7  {
 8    headers: {
 9      "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
10    },
11  },
12)
13  .then((response) => response.json())
14  .then((data) => console.log(data));
 1package main
 2
 3import (
 4    "fmt"
 5    "io/ioutil"
 6    "net/http"
 7)
 8
 9func main() {
10    client := &http.Client{}
11    req, err := http.NewRequest("GET", "https://api.search.brave.com/res/v1/llm/context?q=what+is+tallest+mountain+in+solar+system", nil)
12    if err != nil {
13        panic(err)
14    }
15
16    req.Header.Set("Accept", "application/json")
17    req.Header.Set("Accept-Encoding", "gzip")
18    req.Header.Set("X-Subscription-Token", "<YOUR_API_KEY>")
19
20    resp, err := client.Do(req)
21    if err != nil {
22        panic(err)
23    }
24    defer resp.Body.Close()
25
26    body, err := ioutil.ReadAll(resp.Body)
27    if err != nil {
28        panic(err)
29    }
30
31    fmt.Println(string(body))
32}
JSON
 1{
 2  "grounding": {
 3    "generic": [
 4      {
 5        "url": "https://en.wikipedia.org/wiki/List_of_tallest_mountains_in_the_Solar_System",
 6        "title": "List of tallest mountains in the Solar System",
 7        "snippets": [
 8          "{\"title\":\"List of tallest mountains in the Solar System\",\"table\":[{\"Planet\":\"Mercury\",\"Tallest peak\":\"Caloris Montes\",\"Base-to-peak height\":\" 3 km (1.9 mi)\",\"% of radius\":\"0.12\",\"Origin\":\"impact\",\"Notes\":\"Formed by the Caloris impact\"},{\"Planet\":\"Venus\",\"Tallest peak\":\"Maat Mons\",\"Base-to-peak height\":\"4.9 km (3.0 mi) (approx.)\",\"% of radius\":\"0.081\",\"Origin\":\"volcanic\",\"Notes\":\"Highest volcano on Venus\"},{\"Planet\":\"Earth\",\"Tallest peak\":\"Mauna Kea and Mauna Loa\",\"Base-to-peak height\":\"10.2 km (6.3 mi)\",\"% of radius\":\"0.16\",\"Origin\":\"volcanic\",\"Notes\":\"4.2 km (2.6 mi) of this is above sea level\"},{\"Planet\":\"Earth\",\"Tallest peak\":\"Haleakal\",\"Base-to-peak height\":\"9.1 km (5.7 mi)\",\"% of radius\":\"0.14\",\"Origin\":\"volcanic\",\"Notes\":\"Rises 3.1 km above sea level\"},{\"Planet\":\"Earth\",\"Tallest peak\":\"Pico del Teide\",\"Base-to-peak height\":\"7.5 km (4.7 mi)\",\"% of radius\":\"0.12\",\"Origin\":\"volcanic\",\"Notes\":\"Rises 3.7 km above sea level\"},{\"Planet\":\"Earth\",\"Tallest peak\":\"Denali (Mount McKinley)\",\"Base-to-peak height\":\"5.3 to 5.9 km (3.3 to 3.7 mi)\",\"% of radius\":\"0.093\",\"Origin\":\"tectonic\",\"Notes\":\"Tallest mountain base-to-peak on land\"},{\"Planet\":\"Earth\",\"Tallest peak\":\"Mount Everest\",\"Base-to-peak height\":\"3.6 to 4.6 km (2.2 to 2.9 mi)\",\"% of radius\":\"0.072\",\"Origin\":\"tectonic\",\"Notes\":\"4.6 km on north face, 3.6 km on south face; highest elevation (8.8 km) above sea level, as well as by wet and dry prominence (but not among the tallest from base to peak, nor in distance to Earth's center, as Chimborazo rises highest).\"},{\"Planet\":\"Moon\",\"Tallest peak\":\"Mons Huygens\",\"Base-to-peak height\":\"5.3 km (3.3 mi)\",\"% of radius\":\"0.31\",\"Origin\":\"impact\",\"Notes\":\"Formed by the Imbrium impact.\"},{\"Planet\":\"Moon\",\"Tallest peak\":\"Mons Mouton\",\"Base-to-peak height\":\"6 km (3.7 mi)\",\"% of radius\":\"0.35\",\"Origin\":\"impact\",\"Notes\":\"Possibly formed by the South Pole-Aitken basin impact.\"},{\"Planet\":\"Moon\",\"Tallest peak\":\"Southern Farside Mountain\",\"Base-to-peak height\":\"7 km (4.3 mi)\",\"% of radius\":\"0.40\",\"Origin\":\"impact\",\"Notes\":\"Informal name of the Moon's tallest free-standing mountain. Possibly formed by the South Pole-Aitken basin impact. Not highest lunar peak by prominence, which would be Selenean summit.\"},{\"Planet\":\"Moon\",\"Tallest peak\":\"Mons Hadley\",\"Base-to-peak height\":\"4.5 km (2.8 mi)\",\"% of radius\":\"0.26\",\"Origin\":\"impact\",\"Notes\":\"Formed by the Imbrium impact\"},{\"Planet\":\"Moon\",\"Tallest peak\":\"Mons Rmker\",\"Base-to-peak height\":\"1.3 km (0.81 mi)\",\"% of radius\":\"0.063\",\"Origin\":\"volcanic\",\"Notes\":\"Largest volcanic construct on the Moon\"},{\"Planet\":\"Mars\",\"Tallest peak\":\"Olympus Mons\",\"Base-to-peak height\":\"21.926 km (13.616.2 mi; 72,00085,000 ft)\",\"% of radius\":\"0.65\",\"Origin\":\"volcanic\",\"Notes\":\"Tallest mountain in the Solar System. Rises 26 km above northern plains, (dry prominence) 1000 km away. Summit calderas are 6080 km wide, up to 3.2 km deep; scarp around margin is up to 8 km high. A shield volcano, the mean flank slope is a modest 5.2 degrees.\"},{\"Planet\":\"Mars\",\"Tallest peak\":\"Ascraeus Mons\",\"Base-to-peak height\":\"14.9 km (9.3 mi)\",\"% of radius\":\"0.44\",\"Origin\":\"volcanic\",\"Notes\":\"Tallest of the three Tharsis Montes\"},{\"Planet\":\"Mars\",\"Tallest peak\":\"Elysium Mons\",\"Base-to-peak height\":\"12.6 km (7.8 mi)\",\"% of radius\":\"0.37\",\"Origin\":\"volcanic\",\"Notes\":\"Highest volcano in Elysium\"},{\"Planet\":\"Mars\",\"Tallest peak\":\"Arsia Mons\",\"Base-to-peak height\":\"11.7 km (7.3 mi)\",\"% of radius\":\"0.35\",\"Origin\":\"volcanic\",\"Notes\":\"Summit caldera is 108 to 138 km (67 to 86 mi) across\"},{\"Planet\":\"Mars\",\"Tallest peak\":\"Pavonis Mons\",\"Base-to-peak height\":\"8.4 km (5.2 mi)\",\"% of radius\":\"0.25\",\"Origin\":\"volcanic\",\"Notes\":\"Summit caldera is 4.8 km (3.0 mi) deep\"},{\"Planet\":\"Mars\",\"Tallest peak\":\"Anseris Mons\",\"Base-to-peak height\":\"6.2 km (3.9 mi)\",\"% of radius\":\"0.18\",\"Origin\":\"impact\",\"Notes\":\"Among the highest nonvolcanic peaks on Mars, formed by the Hellas impact\"},{\"Planet\":\"Mars\",\"Tallest peak\":\"Aeolis Mons (\\\"Mount Sharp\\\")\",\"Base-to-peak height\":\"4.5 to 5.5 km (2.8 to 3.4 mi)\",\"% of radius\":\"0.16\",\"Origin\":\"deposition and erosion\",\"Notes\":\"Formed from deposits in Gale crater; the MSL rover has been ascending it since November 2014.\"},{\"Planet\":\"Vesta\",\"Tallest peak\":\"Rheasilvia central peak\",\"Base-to-peak height\":\"2022 km (1214 mi; 66,00072,000 ft)\",\"% of radius\":\"8.4\",\"Origin\":\"impact\",\"Notes\":\"Almost 200 km (120 mi) wide. See also: List of largest craters in the Solar System\"},{\"Planet\":\"Ceres\",\"Tallest peak\":\"Ahuna Mons\",\"Base-to-peak height\":\"4 km (2.5 mi)\",\"% of radius\":\"0.85\",\"Origin\":\"cryovolcanic\",\"Notes\":\"Isolated steep-sided dome in relatively smooth area; max. height of ~ 5 km on steepest side; roughly antipodal to largest impact basin on Ceres\"},{\"Planet\":\"Io\",\"Tallest peak\":\"Bosaule Montes \\\"South\\\"\",\"Base-to-peak height\":\"17.5 to 18.2 km (10.9 to 11.3 mi)\",\"% of radius\":\"1.0\",\"Origin\":\"tectonic\",\"Notes\":\"Has a 15 km (9 mi) high scarp on its SE margin\"},{\"Planet\":\"Io\",\"Tallest peak\":\"Ionian Mons east ridge\",\"Base-to-peak height\":\"12.7 km (7.9 mi) (approx.)\",\"% of radius\":\"0.70\",\"Origin\":\"tectonic\",\"Notes\":\"Has the form of a curved double ridge\"},{\"Planet\":\"Io\",\"Tallest peak\":\"Euboea Montes\",\"Base-to-peak height\":\"10.5 to 13.4 km (6.5 to 8.3 mi)\",\"% of radius\":\"0.74\",\"Origin\":\"tectonic\",\"Notes\":\"A NW flank landslide left a 25,000 km3 debris apron\"},{\"Planet\":\"Io\",\"Tallest peak\":\"unnamed (245 W, 30 S)\",\"Base-to-peak height\":\"2.5 km (1.6 mi) (approx.)\",\"% of radius\":\"0.14\",\"Origin\":\"volcanic\",\"Notes\":\"One of the tallest of Io's many volcanoes, with an atypical conical form\"},{\"Planet\":\"Mimas\",\"Tallest peak\":\"Herschel central peak\",\"Base-to-peak height\":\"7 km (4 mi) (approx.)\",\"% of radius\":\"3.5\",\"Origin\":\"impact\",\"Notes\":\"See also: List of largest craters in the Solar System\"},{\"Planet\":\"Dione\",\"Tallest peak\":\"Janiculum Dorsa\",\"Base-to-peak height\":\"1.5 km (0.9 mi)\",\"% of radius\":\"0.27\",\"Origin\":\"tectonic\",\"Notes\":\"Surrounding crust depressed ca. 0.3 km.\"},{\"Planet\":\"Titan\",\"Tallest peak\":\"Mithrim Montes\",\"Base-to-peak height\":\" 3.3 km (2.1 mi)\",\"% of radius\":\"0.13\",\"Origin\":\"tectonic\",\"Notes\":\"May have formed due to global contraction\"},{\"Planet\":\"Titan\",\"Tallest peak\":\"Doom Mons\",\"Base-to-peak height\":\"1.45 km (0.90 mi)\",\"% of radius\":\"0.056\",\"Origin\":\"cryovolcanic\",\"Notes\":\"Adjacent to Sotra Patera, a 1.7 km (1.1 mi) deep collapse feature\"},{\"Planet\":\"Iapetus\",\"Tallest peak\":\"equatorial ridge\",\"Base-to-peak height\":\"20 km (12 mi) (approx.)\",\"% of radius\":\"2.7\",\"Origin\":\"uncertain\",\"Notes\":\"Individual peaks have not been measured\"},{\"Planet\":\"Oberon\",\"Tallest peak\":\"unnamed (\\\"limb mountain\\\")\",\"Base-to-peak height\":\"11 km (7 mi) (approx.)\",\"% of radius\":\"1.4\",\"Origin\":\"impact (?)\",\"Notes\":\"A value of 6 km was given shortly after the Voyager 2 encounter\"},{\"Planet\":\"Pluto\",\"Tallest peak\":\"Tenzing Montes, peak \\\"T2\\\"\",\"Base-to-peak height\":\"~6.2 km (3.9 mi)\",\"% of radius\":\"0.52\",\"Origin\":\"tectonic (?)\",\"Notes\":\"Composed of water ice; named after Tenzing Norgay\"},{\"Planet\":\"Pluto\",\"Tallest peak\":\"Piccard Mons\",\"Base-to-peak height\":\"~5.5 km (3.4 mi)\",\"% of radius\":\"0.46\",\"Origin\":\"cryovolcanic (?)\",\"Notes\":\"~220 km across; central depression is 11 km deep\"},{\"Planet\":\"Pluto\",\"Tallest peak\":\"Wright Mons\",\"Base-to-peak height\":\"~4.7 km (2.9 mi)\",\"% of radius\":\"0.40\",\"Origin\":\"cryovolcanic (?)\",\"Notes\":\"~160 km across; summit depression ~56 km across and 4.5 km deep\"},{\"Planet\":\"Charon\",\"Tallest peak\":\"Butler Mons\",\"Base-to-peak height\":\" 4.5 km (2.8 mi)\",\"% of radius\":\"0.74\",\"Origin\":\"tectonic (?)\",\"Notes\":\"Vulcan Planitia, the southern plains, has several isolated peaks, possibly tilted crustal blocks\"},{\"Planet\":\"Charon\",\"Tallest peak\":\"Dorothy central peak\",\"Base-to-peak height\":\"~4.0 km (2.5 mi)\",\"% of radius\":\"0.66\",\"Origin\":\"impact\",\"Notes\":\"North polar impact basin Dorothy, Charon's largest, is ~240 km across and 6 km deep\"},{\"Planet\":\"Mni\",\"Tallest peak\":\"unnamed\",\"Base-to-peak height\":\"25 km (16 mi)\",\"% of radius\":\"6.3\",\"Origin\":\"impact\",\"Notes\":\"Discovered by stellar occultation; it is unclear whether this feature is a genuine topographic peak or a transiting/occulting satellite.\"}],\"caption\":\"List\",\"headers\":[\"List of t",
 9          "## List\n### Tallest mountains by elevation\n* Olympus Mons 72,000&nbsp;ft (22,000&nbsp;m)\n\n* Equatorial Ridge 65,617&nbsp;ft (20,000&nbsp;m)\n\n* Bosaule Mons 59,711&nbsp;ft (18,200&nbsp;m)\n\n* Ascraeus Mons 49,000&nbsp;ft (15,000&nbsp;m)\n\n* Ionian Mons 41,667&nbsp;ft (12,700&nbsp;m)\n\n* Elysium Mons 41,338&nbsp;ft (12,600&nbsp;m)\n\n* Arsia Mons 38,386&nbsp;ft (11,700&nbsp;m)\n\n* Limb Mountain 36,089&nbsp;ft (11,000&nbsp;m)\n\n* Euboea Montes 34,449&nbsp;ft (10,500&nbsp;m)\n\n* Mauna Kea 33,500&nbsp;ft (10,200&nbsp;m)\n\n* Mount Everest 29,029&nbsp;ft (8,848&nbsp;m)\n\n* Herschel Peak 22,966&nbsp;ft (7,000&nbsp;m)\n\n* Anseris Mons 20,341&nbsp;ft (6,200&nbsp;m)\n\n* Tenzing Montes 20,341&nbsp;ft (6,200&nbsp;m)\n\n* Denali/Mount McKinley 20,310&nbsp;ft (6,190&nbsp;m)\n\n* Mount Kilimanjaro 19,341&nbsp;ft (5,895&nbsp;m)\n\n* Mons Huygens 18,045&nbsp;ft (5,500&nbsp;m)\n\n* Aeolis Mons 18,045&nbsp;ft (5,500&nbsp;m)\n\n* Piccard Mons 18,045&nbsp;ft (5,500&nbsp;m)\n\n* Maat Mons 16,076&nbsp;ft (4,900&nbsp;m)\n\n* Wright Mons 15,420&nbsp;ft (4,700&nbsp;m)\n\n* Mons Hadley 14,764&nbsp;ft (4,500&nbsp;m)\n\n* Butler Mons 14,764&nbsp;ft (4,500&nbsp;m)\n\n* Ahuna Mons 13,500&nbsp;ft (4,100&nbsp;m)\n\n* Dorothy Peak 13,123&nbsp;ft (4,000&nbsp;m)\n\n* Mithrim Montes 10,948&nbsp;ft (3,337&nbsp;m)\n\n* Haleakal 10,023&nbsp;ft (3,055&nbsp;m)\n\n* Caloris Montes 9,843&nbsp;ft (3,000&nbsp;m)\n\n* Io (unnamed peak) 8,202&nbsp;ft (2,500&nbsp;m)\n\n* Janiculum Dorsa 4,921&nbsp;ft (1,500&nbsp;m)\n\n* Doom Mons 4,757&nbsp;ft (1,450&nbsp;m)\n\n* Mons Rmker 4,265&nbsp;ft (1,300&nbsp;m)"
10        ]
11      },
12      ...
13    ],
14    "map": []
15  },
16  "sources": {
17    "https://en.wikipedia.org/wiki/List_of_tallest_mountains_in_the_Solar_System": {
18      "title": "List of tallest mountains in the Solar System",
19      "hostname": "en.wikipedia.org",
20      "age": [
21        "Friday, February 06, 2026",
22        "2026-02-06",
23        "11 days ago"
24      ]
25    },
26    ...
27  }
28}
Python cURL JavaScript GO
 1from openai import OpenAI
 2
 3client = OpenAI(
 4  api_key="<YOUR_BRAVE_SEARCH_API_KEY>",
 5  base_url="https://api.search.brave.com/res/v1",
 6)
 7
 8completions = client.chat.completions.create(
 9  messages=[
10    {
11      "role": "user",
12      "content": "What is the second highest mountain?",
13    }
14  ],
15  model="brave",
16  stream=False,
17)
18
19print(completions.choices[0].message.content)
1curl -X POST  -s --compressed "https://api.search.brave.com/res/v1/chat/completions" \
2  -H "accept: application/json" \
3  -H "Accept-Encoding: gzip" \
4  -H "Content-Type: application/json" \
5  -d '{"stream": "false", "messages": [{"role": "user", "content": "What is the second highest mountain?"}]}' \
6  -H "x-subscription-token: <YOUR_BRAVE_SEARCH_API_KEY>"
 1import OpenAI from 'openai';
 2
 3const client = new OpenAI({
 4  apiKey: process.env['BRAVE_SEARCH_API_KEY'], 
 5  baseURL: 'https://api.search.brave.com/res/v1',
 6});
 7
 8(async () => {
 9  const response = await client.chat.completions.create({
10    model: 'brave',
11    stream: false,
12    messages: [
13      { role: 'user', content: 'What is the second highest mountain?' },
14    ],
15  });
16
17  console.log(response.choices[0].message.content);
18})();
 1package main
 2
 3import (
 4	"context"
 5	"fmt"
 6
 7	openai "github.com/openai/openai-go"
 8	"github.com/openai/openai-go/option"
 9)
10
11func main() {
12	client := openai.NewClient(
13		option.WithAPIKey("BRAVE_SEARCH_API_KEY"),
14		option.WithBaseURL("https://api.search.brave.com/res/v1"),                    
15	)
16
17	chatCompletion, err := client.Chat.Completions.New(context.TODO(), openai.ChatCompletionNewParams{
18		Messages: []openai.ChatCompletionMessageParamUnion{
19			openai.UserMessage("What is the second highest mountain?"),
20		},
21		Model: "brave",
22	})
23
24	if err != nil {
25		panic(err.Error())
26	}
27
28	fmt.Println(chatCompletion.Choices[0].Message.Content)
29}
JSON
 1{
 2   "model": "brave-pro",
 3   "system_fingerprint": "",
 4   "choices": [
 5       {
 6           "index": 0,
 7           "message": {
 8               "role": "assistant",
 9               "content": "The second highest mountain in the world is K2, standing at 8,611 metres (28,251 ft) above sea level. It is located in the Karakoram range, on the border between the Gilgit-Baltistan region of Pakistan and the Taxkorgan Tajik Autonomous County of Xinjiang, China.\n\nK2 is known as the \"Savage Mountain,\" a nickname attributed to climber George Bell after the 1953 American expedition, due to its extreme difficulty and high fatality rate. It is considered a more challenging climb than Mount Everest, the world's highest peak, because of its steep slopes, unpredictable weather, and technical climbing routes.\n\nThe first successful ascent of K2 was achieved on July 31, 1954, by Italian climbers Lino Lacedelli and Achille Compagnoni as part of an expedition led by Ardito Desio. As of August 2023, approximately 800 people have summited K2, with 96 recorded deaths during attempts.\n\nK2 is also known by other names, including Mount Godwin-Austen and Chogori, though it is most commonly referred to by its survey designation. In January 2021, it became the last of the 14 eight-thousanders to be summited in winter, accomplished by a team of Nepalese climbers led by Nirmal Purja and Mingma Gyalje Sherpa."
10           },
11           "finish_reason": "stop"
12       }
13
14   ],
15   "created": 1754426219,
16   "id": "749fc052-ea6d-47f1-ab11-a4ae293d0b57",
17   "object": "chat.completion",
18   "usage": {
19       "completion_tokens": 305,
20       "prompt_tokens": 7275,
21       "total_tokens": 7580,
22       "completion_tokens_details": {
23           "reasoning_tokens": 0
24       }
25   }
26}
Python cURL JavaScript GO
 1#!/usr/bin/env python
 2
 3import requests
 4
 5print(
 6    requests.get(
 7        "https://api.search.brave.com/res/v1/images/search",
 8        headers={
 9            "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
10        },
11        params={
12            "q": "munich",
13            "count": 20,
14            "country": "us",
15            "search_lang": "en",
16            "spellcheck": 1,
17        },
18    ).json()
19)
1curl -s --compressed "https://api.search.brave.com/res/v1/images/search?q=munich&safesearch=strict&count=20&search_lang=en&country=us&spellcheck=1" \
2  -H "Accept: application/json" \
3  -H "Accept-Encoding: gzip" \
4  -H "X-Subscription-Token: <YOUR_API_KEY>"
 1#!/usr/bin/env node
 2
 3fetch(
 4  `https://api.search.brave.com/res/v1/images/search?${new URLSearchParams({
 5    q: "munich",
 6    count: 20,
 7    country: "us",
 8    search_lang: "en",
 9    spellcheck: 1,
10  })}`,
11  {
12    headers: {
13      "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
14    },
15  },
16)
17  .then((response) => response.json())
18  .then((data) => console.log(data));
 1package main
 2
 3import (
 4    "compress/gzip"
 5    "fmt"
 6    "io"
 7    "net/http"
 8    "net/url"
 9)
10
11func main() {
12    baseUrl := "https://api.search.brave.com/res/v1/images/search"
13    params := url.Values{}
14    params.Add("q", "munich")
15    params.Add("safesearch", "strict")
16    params.Add("count", "20")
17    params.Add("search_lang", "en")
18    params.Add("country", "us")
19    params.Add("spellcheck", "1")
20
21    client := &http.Client{}
22    req, err := http.NewRequest("GET", baseUrl+"?"+params.Encode(), nil)
23    if err != nil {
24        panic(err)
25    }
26
27    req.Header.Set("Accept", "application/json")
28    req.Header.Set("Accept-Encoding", "gzip")
29    req.Header.Set("X-Subscription-Token", "<YOUR_API_KEY>")
30
31    resp, err := client.Do(req)
32    if err != nil {
33        panic(err)
34    }
35    defer resp.Body.Close()
36
37    var reader io.ReadCloser
38    if resp.Header.Get("Content-Encoding") == "gzip" {
39        reader, err = gzip.NewReader(resp.Body)
40        if err != nil {
41            panic(err)
42        }
43        defer reader.Close()
44    } else {
45        reader = resp.Body
46    }
47
48    body, err := io.ReadAll(reader)
49    if err != nil {
50        panic(err)
51    }
52
53    fmt.Println(string(body))
54}
JSON
 1{
 2    "type": "images",
 3    "query": {
 4        "original": "hammerhead shark",
 5        "spellcheck_off": false,
 6        "show_strict_warning": false
 7    },
 8    "results": [
 9        {
10            "type": "image_result",
11            "title": "Hammerhead Shark",
12            "url": "https://stock.adobe.com/search?k=%22hammerhead+shark%22",
13            "source": "stock.adobe.com",
14            "page_fetched": "2025-02-28T23:32:43Z",
15            "thumbnail": {
16                "src": "https://imgs.search.brave.com/PlleyzpCI84WDWewoXw1E38DYRsdoNYaMVmYuuXaX-g/rs:fit:500:0:0:0/g:ce/aHR0cHM6Ly90My5m/dGNkbi5uZXQvanBn/LzAzLzczLzYxLzU0/LzM2MF9GXzM3MzYx/NTQ1MV9lbE1SWW5N/VE1zZ1ZVOXd0Nmps/dTRkS2Z3dUdwUmZK/dy5qcGc"
17            },
18            "properties": {
19                "url": "https://t3.ftcdn.net/jpg/03/73/61/54/360_F_373615451_elMRYnMTMsgVU9wt6jlu4dKfwuGpRfJw.jpg",
20                "placeholder": "https://imgs.search.brave.com/fY6pOi-eKjgdulvjAfnJ4r4I4taP73Mvk_XB_I8aWM4/rs:fit:76:0:0:0/g:ce/q:10/aHR0cHM6Ly90My5m/dGNkbi5uZXQvanBn/LzAzLzczLzYxLzU0/LzM2MF9GXzM3MzYx/NTQ1MV9lbE1SWW5N/VE1zZ1ZVOXd0Nmps/dTRkS2Z3dUdwUmZK/dy5qcGc"
21            },
22            "meta_url": {
23                "scheme": "https",
24                "netloc": "stock.adobe.com",
25                "hostname": "stock.adobe.com",
26                "favicon": "https://imgs.search.brave.com/ZxIJGoK8dKjPx3r6T5VEe1HXg5wLOSkejXoCy5fIufQ/rs:fit:32:32:1:0/g:ce/aHR0cDovL2Zhdmlj/b25zLnNlYXJjaC5i/cmF2ZS5jb20vaWNv/bnMvOTFhMDJkZGQ1/OWEwZTBhOGJjODU2/ZDcwNTQ1MzYyYmNm/NDlhYTY4Y2FhYjY4/MjYzNTgxMWUwM2Q3/YmJmZTQ2ZS9zdG9j/ay5hZG9iZS5jb20v",
27                "path": " search"
28            },
29            "confidence": "high"
30        }
31    ]
32}
Python cURL JavaScript GO
 1#!/usr/bin/env python
 2
 3import requests
 4
 5print(
 6    requests.get(
 7        "https://api.search.brave.com/res/v1/images/search",
 8        headers={
 9            "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
10        },
11        params={
12            "q": "black myth wukong",
13            "count": 10,
14            "country": "us",
15            "search_lang": "en",
16            "spellcheck": 1,
17        },
18    ).json()
19)
1curl -s --compressed "https://api.search.brave.com/res/v1/videos/search?q=black+myth+wukong&count=10&country=us&search_lang=en&spellcheck=1" \
2  -H "Accept: application/json" \
3  -H "Accept-Encoding: gzip" \
4  -H "X-Subscription-Token: <YOUR_API_KEY>"
 1#!/usr/bin/env node
 2
 3fetch(
 4  `https://api.search.brave.com/res/v1/videos/search?${new URLSearchParams({
 5    q: "black myth wukong",
 6    count: 10,
 7    country: "us",
 8    search_lang: "en",
 9    spellcheck: 1,
10  })}`,
11  {
12    headers: {
13      "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
14    },
15  },
16)
17  .then((response) => response.json())
18  .then((data) => console.log(data));
 1package main
 2
 3import (
 4    "fmt"
 5    "io/ioutil"
 6    "net/http"
 7)
 8
 9func main() {
10    client := &http.Client{}
11    req, err := http.NewRequest("GET", "https://api.search.brave.com/res/v1/videos/search?q=black+myth+wukong&count=10&country=us&search_lang=en&spellcheck=1", nil)
12    if err != nil {
13        panic(err)
14    }
15
16    req.Header.Set("Accept", "application/json")
17    req.Header.Set("Accept-Encoding", "gzip")
18    req.Header.Set("X-Subscription-Token", "<YOUR_API_KEY>")
19
20    resp, err := client.Do(req)
21    if err != nil {
22        panic(err)
23    }
24    defer resp.Body.Close()
25
26    body, err := ioutil.ReadAll(resp.Body)
27    if err != nil {
28        panic(err)
29    }
30
31    fmt.Println(string(body))
32}
JSON
 1{
 2    "type": "videos",
 3    "query": {
 4        "original": "black myth wukong",
 5        "spellcheck_off": false,
 6        "show_strict_warning": false
 7    },
 8    "results": [
 9        {
10            "type": "video_result",
11            "url": "https://www.youtube.com/watch?v=VLnywm2XgJg",
12            "title": "Black Myth: Wukong - Before You Buy - YouTube",
13            "description": "Black Myth: Wukong (PC, PS5, Xbox Series X/S) is a fresh action game from a newer development studio. How is it? Let's talk.Subscribe for more: http://youtub...",
14            "age": "August 16, 2024",
15            "page_age": "2024-08-16T17:41:12",
16            "video": {
17                "duration": "12:22",
18                "views": 2832944,
19                "creator": "gameranx",
20                "publisher": "YouTube",
21                "requires_subscription": false,
22                "tags": [
23                    "jake baldino"
24                ],
25                "author": {
26                    "name": "gameranx",
27                    "url": "http://www.youtube.com/@gameranxTV"
28                }
29            }
30        }
31    ]
32}
Python cURL JavaScript GO
 1#!/usr/bin/env python
 2
 3import requests
 4
 5print(
 6    requests.get(
 7        "https://api.search.brave.com/res/v1/news/search",
 8        headers={
 9            "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
10        },
11        params={
12            "q": "munich",
13            "count": 10,
14            "country": "us",
15            "search_lang": "en",
16            "spellcheck": 1,
17        },
18    ).json()
19)
1curl -s --compressed "https://api.search.brave.com/res/v1/news/search?q=munich&count=10&country=us&search_lang=en&spellcheck=1" \
2  -H "Accept: application/json" \
3  -H "Accept-Encoding: gzip" \
4  -H "X-Subscription-Token: <YOUR_API_KEY>"
 1#!/usr/bin/env node
 2
 3fetch(
 4  `https://api.search.brave.com/res/v1/news/search?${new URLSearchParams({
 5    q: "munich",
 6    count: 10,
 7    country: "us",
 8    search_lang: "en",
 9    spellcheck: 1,
10  })}`,
11  {
12    headers: {
13      "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
14    },
15  },
16)
17  .then((response) => response.json())
18  .then((data) => console.log(data));
 1package main
 2
 3import (
 4    "fmt"
 5    "io"
 6    "net/http"
 7)
 8
 9func main() {
10    client := &http.Client{}
11    req, err := http.NewRequest("GET", "https://api.search.brave.com/res/v1/news/search?q=munich&count=10&country=us&search_lang=en&spellcheck=1", nil)
12    if err != nil {
13        panic(err)
14    }
15
16    req.Header.Set("Accept", "application/json")
17    req.Header.Set("Accept-Encoding", "gzip")
18    req.Header.Set("X-Subscription-Token", "<YOUR_API_KEY>")
19
20    resp, err := client.Do(req)
21    if err != nil {
22        panic(err)
23    }
24    defer resp.Body.Close()
25
26    body, err := io.ReadAll(resp.Body)
27    if err != nil {
28        panic(err)
29    }
30
31    fmt.Println(string(body))
32}
JSON
 1{
 2    "type": "news",
 3    "query": {
 4        "original": "munich",
 5        "spellcheck_off": false,
 6        "show_strict_warning": false
 7    },
 8    "results": [
 9        {
10            "type": "news_result",
11            "title": "News | Munich tops TD100 ranking for office and retail rents",
12            "url": "https://www.costar.com/article/376440806/munich-tops-td100-ranking-for-office-and-retail-rents",
13            "description": "Sister publication Thomas Daily gathers metrics like rent and yield for the top 100 cities in Germany",
14            "age": "1 day ago",
15            "page_age": "2025-04-01T13:20:42",
16            "meta_url": {
17                "scheme": "https",
18                "netloc": "costar.com",
19                "hostname": "www.costar.com",
20                "favicon": "https://imgs.search.brave.com/qKaDutjw31L2t0y0EZpwK8bCGuuuKW62BuPTjoc4EeI/rs:fit:32:32:1:0/g:ce/aHR0cDovL2Zhdmlj/b25zLnNlYXJjaC5i/cmF2ZS5jb20vaWNv/bnMvYjMyNmE3ZWY4/YjgyNzlkM2M1ZThh/MjU0YzI3ZGUyNzBi/MDUwNDUxMjUzNGEx/ZjM1Y2FmNmIzZjc3/NjU4YTg0NC93d3cu/Y29zdGFyLmNvbS8",
21                "path": " article   376440806   munich-tops-td100-ranking-for-office-and-retail-rents"
22            },
23            "thumbnail": {
24                "src": "https://imgs.search.brave.com/hZsGpoIMHbKbPOWe7zKSlocTJV9rkjPdlf_slgPUovQ/rs:fit:200:200:1:0/g:ce/aHR0cHM6Ly9jb3N0/YXIuYnJpZ2h0c3Bv/dGNkbi5jb20vZGlt/czQvZGVmYXVsdC9h/Y2FmOWViLzIxNDc0/ODM2NDcvc3RyaXAv/dHJ1ZS9jcm9wLzIw/NDh4MTM2NiswKzAv/cmVzaXplLzIwNDh4/MTM2NiEvcXVhbGl0/eS8xMDAvP3VybD1o/dHRwJTNBJTJGJTJG/Y29zdGFyLWJyaWdo/dHNwb3QuczMudXMt/ZWFzdC0xLmFtYXpv/bmF3cy5jb20lMkZH/ZXR0eUltYWdlcy0x/MTczNDg0MTE4Lmpw/Zw"
25            }
26        }
27    ]
28}
Python cURL JavaScript GO
 1#!/usr/bin/env python
 2
 3import requests
 4
 5print(
 6    requests.get(
 7        "https://api.search.brave.com/res/v1/suggest/search",
 8        headers={
 9            "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
10        },
11        params={
12            "q": "hello",
13            "count": 5,
14            "country": "us",
15        },
16    ).json()
17)
1curl -s --compressed "https://api.search.brave.com/res/v1/suggest/search?q=hello&country=US&count=5" \
2  -H "Accept: application/json" \
3  -H "Accept-Encoding: gzip" \
4  -H "X-Subscription-Token: <YOUR_API_KEY>"
 1#!/usr/bin/env node
 2
 3fetch(
 4  `https://api.search.brave.com/res/v1/suggest/search?${new URLSearchParams({
 5    q: "hello",
 6    count: 5,
 7    country: "us",
 8  })}`,
 9  {
10    headers: {
11      "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
12    },
13  },
14)
15  .then((response) => response.json())
16  .then((data) => console.log(data));
 1package main
 2
 3import (
 4    "fmt"
 5    "io"
 6    "net/http"
 7)
 8
 9func main() {
10    client := &http.Client{}
11    req, err := http.NewRequest("GET", "https://api.search.brave.com/res/v1/suggest/search?q=hello&country=US&count=5", nil)
12    if err != nil {
13        panic(err)
14    }
15
16    req.Header.Add("Accept", "application/json")
17    req.Header.Add("Accept-Encoding", "gzip")
18    req.Header.Add("X-Subscription-Token", "<YOUR_API_KEY>")
19
20    resp, err := client.Do(req)
21    if err != nil {
22        panic(err)
23    }
24    defer resp.Body.Close()
25
26    body, err := io.ReadAll(resp.Body)
27    if err != nil {
28        panic(err)
29    }
30
31    fmt.Println(string(body))
32}
JSON
 1{
 2    "type": "suggest",
 3    "query": {
 4        "original": "hello"
 5    },
 6    "results": [
 7        {
 8            "query": "hello"
 9        },
10        {
11            "query": "hello chat gpt"
12        },
13        {
14            "query": "hellofresh"
15        },
16        {
17            "query": "hello kitty island adventure"
18        },
19        {
20            "query": "hello kitty"
21        }
22    ]
23}
Python cURL JavaScript GO
 1#!/usr/bin/env python
 2
 3import requests
 4
 5print(
 6    requests.get(
 7        "https://api.search.brave.com/res/v1/spellcheck/search",
 8        headers={
 9            "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
10        },
11        params={
12            "q": "hellop",
13            "country": "us",
14        },
15    ).json()
16)
1curl -s --compressed "https://api.search.brave.com/res/v1/spellcheck/search?q=hellop&country=US" \
2  -H "Accept: application/json" \
3  -H "Accept-Encoding: gzip" \
4  -H "X-Subscription-Token: <YOUR_API_KEY>"
 1#!/usr/bin/env node
 2
 3fetch(
 4  `https://api.search.brave.com/res/v1/spellcheck/search?${new URLSearchParams({
 5    q: "hellop",
 6    country: "us",
 7  })}`,
 8  {
 9    headers: {
10      "X-Subscription-Token": "<BRAVE_SEARCH_API_KEY>",
11    },
12  },
13)
14  .then((response) => response.json())
15  .then((data) => console.log(data));
 1package main
 2
 3import (
 4	"fmt"
 5	"io"
 6	"net/http"
 7)
 8
 9func main() {
10	client := &http.Client{}
11	req, err := http.NewRequest("GET", "https://api.search.brave.com/res/v1/spellcheck/search?q=hellop&country=US", nil)
12	if err != nil {
13		panic(err)
14	}
15
16	req.Header.Set("Accept", "application/json")
17	req.Header.Set("Accept-Encoding", "gzip")
18	req.Header.Set("X-Subscription-Token", "<YOUR_API_KEY>")
19
20	resp, err := client.Do(req)
21	if err != nil {
22		panic(err)
23	}
24	defer resp.Body.Close()
25
26	body, _ := io.ReadAll(resp.Body)
27	fmt.Println(string(body))
28}
JSON
 1{
 2    "type": "spellcheck",
 3    "query": {
 4        "original": "hellop"
 5    },
 6    "results": [
 7        {
 8            "query": "hello"
 9        }
10    ]
11}
Learn more about Search API

Get safer automation, with Brave's agentic AI

Like many browsers, Brave has an agent mode. But unlike other agentic experiences, Brave’s has strict safeguards built in to safeguard against unintended actions or exposure to security risks.

Brave’s browser agent is off by default, and an additional feature flag must be enabled before the experience can be used.

This explicit invoking can help ensure users get what they want from an agent, and not what they don’t want. That means help with automating tasks, while still safeguarding against unintended actions and exposure to website security flaws.

Use cases:

  • Automate online shopping
  • Automate product & pricing comparisons
  • Website research
  • Automate content generation like emails and social media posts
  • Build schedules for work, school, or personal life
  • Create study guides based on written, audio, or video content
  • Look up recipes, and add ingredients to a shopping cart

Differentiators:

  • Isolated browsing profile to ensure agent can't access other open tabs or windows
  • Opt-in only
  • Guardrails against malicious sites and prompt-injection attacks
  • Requires explicit consent before agent can complete an action
  • No login or account required
Read more about private agentic browsing Footnotes
  1. Duck.ai retains user chats for at most 30 days 

  2. Gemini retains chats for 18 months - 36 months 

  3. Copilot retains chats for up to 18 months 

The latest news about Brave AI

See the latest products & features related to Brave's AI offerings.

Introducing AI Grounding with Brave Search API, providing enhanced search performance in AI applications

Aug 5, 2025

With AI Grounding, responses are anchored in high-quality, factual information from verifiable Web sources, thus reducing hallucinations and responding more appropriately to nuanced inputs.

Read more

Brave Software announces availability of the Brave Search API in the new AWS Marketplace AI Agents and Tools category

Jul 16, 2025

Brave Search API available in the new AI Agents and Tools category of AWS Marketplace, providing real-time Web data for AI, LLMs, and search applications.

Read more

Brave Place Search API: The Google Maps Alternative That Costs 6–7x Less

Jul 8, 2026

Brave's improved Place Search API matches Google Maps on quality in real-world tests, at 67x lower cost$5 per 1,000 requests on an independent index built for maps, apps, and AI agents.

Read more

Claude Cowork on Amazon Bedrock with Brave Search: bringing real-time Web intelligence for your organization

Jun 29, 2026

In this post we dive deep into how to configure the Cowork desktop application with AWS Bedrock, and how to add Brave Search as the local MCP server for interactive, user-driven workflows.

Read more

Indirect Prompt Injection remains a fundamental security challenge for AI

Jun 8, 2026

Instructions hidden in webpages and documents can hijack AI agents mid-task. Research shows indirect prompt injection hits cloud and on-device LLMs alikelocal deployment doesn't eliminate the risk.

Read more

Brave Search API approaches 700,000 OpenClaw users, highlighting the surge in machine-first search

Apr 1, 2026

Nearly 700,000 OpenClaw users have signed up for the Brave Search API, cementing Brave as the preferred independent search provider powering the leading open-source AI agent platform.

Read more
See all AI news
Get Brave

Web Proxy Viewer  |  New URL  |  Original Page