[{"data":1,"prerenderedAt":511},["ShallowReactive",2],{"navigation_docs":3,"-providers-brave":104,"-providers-brave-surround":506},[4,44],{"title":5,"path":6,"stem":7,"children":8,"icon":43},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27,31,35,39],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Searching","\u002Fguide\u002Fsearch","1.guide\u002F2.search",{"title":16,"path":17,"stem":18},"Fan-out","\u002Fguide\u002Ffanout","1.guide\u002F3.fanout",{"title":20,"path":21,"stem":22},"Reading","\u002Fguide\u002Fread","1.guide\u002F4.read",{"title":24,"path":25,"stem":26},"Reverse Image Search","\u002Fguide\u002Fimage","1.guide\u002F5.image",{"title":28,"path":29,"stem":30},"CLI","\u002Fguide\u002Fcli","1.guide\u002F6.cli",{"title":32,"path":33,"stem":34},"Agents","\u002Fguide\u002Fagents","1.guide\u002F7.agents",{"title":36,"path":37,"stem":38},"Custom Providers","\u002Fguide\u002Fcustom","1.guide\u002F8.custom",{"title":40,"path":41,"stem":42},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F9.explorer","i-lucide-book-open",{"title":45,"path":46,"stem":47,"children":48,"icon":103},"Providers","\u002Fproviders","2.providers\u002F0.index",[49,51,55,59,63,67,71,75,79,83,87,91,95,99],{"title":50,"path":46,"stem":47},"Overview",{"title":52,"path":53,"stem":54},"Brave","\u002Fproviders\u002Fbrave","2.providers\u002F01.brave",{"title":56,"path":57,"stem":58},"Context.dev","\u002Fproviders\u002Fcontext","2.providers\u002F02.context",{"title":60,"path":61,"stem":62},"Exa","\u002Fproviders\u002Fexa","2.providers\u002F03.exa",{"title":64,"path":65,"stem":66},"Firecrawl","\u002Fproviders\u002Ffirecrawl","2.providers\u002F04.firecrawl",{"title":68,"path":69,"stem":70},"Jina","\u002Fproviders\u002Fjina","2.providers\u002F05.jina",{"title":72,"path":73,"stem":74},"Mojeek","\u002Fproviders\u002Fmojeek","2.providers\u002F06.mojeek",{"title":76,"path":77,"stem":78},"SearXNG","\u002Fproviders\u002Fsearxng","2.providers\u002F07.searxng",{"title":80,"path":81,"stem":82},"SerpAPI","\u002Fproviders\u002Fserpapi","2.providers\u002F08.serpapi",{"title":84,"path":85,"stem":86},"SerpBase","\u002Fproviders\u002Fserpbase","2.providers\u002F09.serpbase",{"title":88,"path":89,"stem":90},"Tavily","\u002Fproviders\u002Ftavily","2.providers\u002F10.tavily",{"title":92,"path":93,"stem":94},"TinyFish","\u002Fproviders\u002Ftinyfish","2.providers\u002F11.tinyfish",{"title":96,"path":97,"stem":98},"OpenAI Codex","\u002Fproviders\u002Fopenai-codex","2.providers\u002F12.openai-codex",{"title":100,"path":101,"stem":102},"Marginalia","\u002Fproviders\u002Fmarginalia","2.providers\u002F13.marginalia","i-lucide-library",{"id":105,"title":52,"body":106,"description":499,"extension":500,"links":501,"meta":502,"navigation":156,"path":53,"seo":504,"stem":54,"__hash__":505},"docs\u002F2.providers\u002F01.brave.md",{"type":107,"value":108,"toc":492},"minimark",[109,113,118,245,261,265,301,327,331,384,388,478,482,488],[110,111],"provider-facts",{"provider":112},"brave",[114,115,117],"h2",{"id":116},"address-it","Address it",[119,120,125],"pre",{"className":121,"code":122,"language":123,"meta":124,"style":124},"language-ts shiki shiki-themes web web web","import { create } from \"@agntn\u002Fweb\";\n\nconst brave = await create(\"brave\"); \u002F\u002F BRAVE_API_KEY\nconst results = await brave.search(\"typescript runtimes\", { maxResults: 10 });\nconst recent = await brave.search(\"typescript runtimes\", { startPublishedDate: \"2026-06-01\" });\n","ts","",[126,127,128,151,158,190,216],"code",{"__ignoreMap":124},[129,130,133,137,141,144,148],"span",{"class":131,"line":132},"line",1,[129,134,136],{"class":135},"skH_V","import",[129,138,140],{"class":139},"s38Sx"," { create } ",[129,142,143],{"class":135},"from",[129,145,147],{"class":146},"shU9J"," \"@agntn\u002Fweb\"",[129,149,150],{"class":139},";\n",[129,152,154],{"class":131,"line":153},2,[129,155,157],{"emptyLinePlaceholder":156},true,"\n",[129,159,161,164,167,170,173,177,180,183,186],{"class":131,"line":160},3,[129,162,163],{"class":135},"const",[129,165,166],{"class":139}," brave ",[129,168,169],{"class":135},"=",[129,171,172],{"class":135}," await",[129,174,176],{"class":175},"sK71F"," create",[129,178,179],{"class":139},"(",[129,181,182],{"class":146},"\"brave\"",[129,184,185],{"class":139},"); ",[129,187,189],{"class":188},"scIB-","\u002F\u002F BRAVE_API_KEY\n",[129,191,193,195,198,200,202,205,208,210,213],{"class":131,"line":192},4,[129,194,163],{"class":135},[129,196,197],{"class":139}," results ",[129,199,169],{"class":135},[129,201,172],{"class":135},[129,203,204],{"class":139}," brave.",[129,206,207],{"class":175},"search",[129,209,179],{"class":139},[129,211,212],{"class":146},"\"typescript runtimes\"",[129,214,215],{"class":139},", { maxResults: 10 });\n",[129,217,219,221,224,226,228,230,232,234,236,239,242],{"class":131,"line":218},5,[129,220,163],{"class":135},[129,222,223],{"class":139}," recent ",[129,225,169],{"class":135},[129,227,172],{"class":135},[129,229,204],{"class":139},[129,231,207],{"class":175},[129,233,179],{"class":139},[129,235,212],{"class":146},[129,237,238],{"class":139},", { startPublishedDate: ",[129,240,241],{"class":146},"\"2026-06-01\"",[129,243,244],{"class":139}," });\n",[246,247,248,249,252,253,256,257,260],"p",{},"The key goes in the ",[126,250,251],{},"X-Subscription-Token"," header. Pass ",[126,254,255],{},"apiKey"," to ",[126,258,259],{},"create()"," if you do not want env involved.",[114,262,264],{"id":263},"what-it-reads","What it reads",[266,267,268,281],"table",{},[269,270,271],"thead",{},[272,273,274,278],"tr",{},[275,276,277],"th",{},"Call",[275,279,280],{},"Endpoint",[282,283,284],"tbody",{},[272,285,286,291],{},[287,288,289],"td",{},[126,290,207],{},[287,292,293,296,297,300],{},[126,294,295],{},"GET \u002Fres\u002Fv1\u002Fweb\u002Fsearch?q=…&count=…&offset=…&extra_snippets=true&text_decorations=false"," on api.search.brave.com, plus ",[126,298,299],{},"freshness=YYYY-MM-DDtoYYYY-MM-DD"," when a date bound is set",[246,302,303,306,307,310,311,314,315,318,319,322,323,326],{},[126,304,305],{},"count"," is ",[126,308,309],{},"maxResults",", 20 at most. ",[126,312,313],{},"offset"," comes from the continuation and steps through pages of that size. ",[126,316,317],{},"query.more_results_available"," in the response decides whether the next token is ",[126,320,321],{},"next"," or ",[126,324,325],{},"end",", so Brave is one of the few engines that actually tells you.",[114,328,330],{"id":329},"what-comes-back","What comes back",[246,332,333,336,337,340,341,344,345,348,349,336,352,355,356,359,360,363,364,367,368,371,372,375,376,379,380,383],{},[126,334,335],{},"snippet"," is the ",[126,338,339],{},"description"," with Brave's HTML escapes decoded. ",[126,342,343],{},"favicon"," comes from ",[126,346,347],{},"meta_url.favicon",", and ",[126,350,351],{},"text",[126,353,354],{},"extra_snippets"," joined with newlines when Brave sends them. ",[126,357,358],{},"publishedDate"," is Brave's ",[126,361,362],{},"page_age",", the page's published or last modified date as Brave read it, so it can be missing. ",[126,365,366],{},"startPublishedDate"," and ",[126,369,370],{},"endPublishedDate"," go out as ",[126,373,374],{},"freshness",", the only filter Brave has here. No score, and ",[126,377,378],{},"includeDomains"," and friends come back in ",[126,381,382],{},"ignoredFilters",".",[114,385,387],{"id":386},"gotchas","Gotchas",[389,390,391,395,429,448,468],"ul",{},[392,393,394],"li",{},"A page is 20 results max. Ask for more and you get 20 plus a continuation.",[392,396,397,398,401,402,405,406,408,409,412,413,412,416,419,420,422,423,367,426,428],{},"Brave bolds query terms with ",[126,399,400],{},"\u003Cstrong>"," unless you send ",[126,403,404],{},"text_decorations=false",", and it escapes ",[126,407,339],{}," like HTML (",[126,410,411],{},"&#x27;",", ",[126,414,415],{},"&amp;",[126,417,418],{},"&quot;","). The adapter turns the bolding off and decodes the escapes, so ",[126,421,335],{}," is plain text. ",[126,424,425],{},"title",[126,427,354],{}," come as text already.",[392,430,431,432,435,436,439,440,443,444,447],{},"The free plan is a couple of thousand queries a month and one query a second. The second query inside that second gets a 429 with no ",[126,433,434],{},"Retry-After",", just ",[126,437,438],{},"X-RateLimit-Reset: 1, 56000"," next to ",[126,441,442],{},"X-RateLimit-Remaining: 0, 445",", one value per window. The client waits out the window that ran dry and asks again, so a batch of five queries takes about four seconds instead of losing three of them. An empty monthly quota names days, not seconds, and that one is ",[126,445,446],{},"RateLimitError"," right away.",[392,449,450,452,453,456,457,460,461,367,464,467],{},[126,451,374],{}," wants ",[126,454,455],{},"YYYY-MM-DDtoYYYY-MM-DD",", both days inside the window, the same day twice gives that day's pages. Anything else, a time on the date included, Brave drops without a word and answers unfiltered, so a datetime bound becomes its UTC day here, a missing start becomes ",[126,458,459],{},"1970-01-01"," and a missing end becomes today's UTC date. The open forms ",[126,462,463],{},"2026-06-01to",[126,465,466],{},"to2026-06-01"," answered correctly when probed, but Brave does not document them, and a filter that fails silently is not the place to lean on that.",[392,469,470,471,474,475,477],{},"Brave only fills extra snippets on a Search plan. A free key still takes ",[126,472,473],{},"extra_snippets=true"," and leaves ",[126,476,351],{}," empty.",[114,479,481],{"id":480},"where-it-lives","Where it lives",[246,483,484,487],{},[126,485,486],{},"src\u002Fproviders\u002Fbrave.ts",". Smallest search adapter with pagination, copy it when you write a new one.",[489,490,491],"style",{},"html pre.shiki code .skH_V, html code.shiki .skH_V{--shiki-light:var(--shiki-token-keyword);--shiki-default:var(--shiki-token-keyword);--shiki-dark:var(--shiki-token-keyword)}html pre.shiki code .s38Sx, html code.shiki .s38Sx{--shiki-light:var(--ui-text-highlighted);--shiki-default:var(--ui-text-highlighted);--shiki-dark:var(--ui-text-highlighted)}html pre.shiki code .shU9J, html code.shiki .shU9J{--shiki-light:var(--shiki-token-string);--shiki-default:var(--shiki-token-string);--shiki-dark:var(--shiki-token-string)}html pre.shiki code .sK71F, html code.shiki .sK71F{--shiki-light:var(--shiki-token-function);--shiki-default:var(--shiki-token-function);--shiki-dark:var(--shiki-token-function)}html pre.shiki code .scIB-, html code.shiki .scIB-{--shiki-light:var(--shiki-token-comment);--shiki-default:var(--shiki-token-comment);--shiki-dark:var(--shiki-token-comment)}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":124,"searchDepth":153,"depth":153,"links":493},[494,495,496,497,498],{"id":116,"depth":153,"text":117},{"id":263,"depth":153,"text":264},{"id":329,"depth":153,"text":330},{"id":386,"depth":153,"text":387},{"id":480,"depth":153,"text":481},"The Brave Search API, one GET per page, with extra snippets joined into text and a continuation that carries the offset.","md",null,{"icon":503},"i-simple-icons-brave",{"title":52,"description":499},"4CKWnx-H-ayc1vF4TyGS5DZ72vmmJ1qWYiYoiEOPOgg",[507,509],{"title":50,"path":46,"stem":47,"description":508,"children":-1},"Thirteen providers, one class shape. Pick one to see its endpoints, the filters it honours, the fields it fills and the traps.",{"title":56,"path":57,"stem":58,"description":510,"children":-1},"The Context.dev API for search with Markdown ranked by relevance and for scraping pages into Markdown or HTML.",1791204846151]