[{"data":1,"prerenderedAt":551},["ShallowReactive",2],{"navigation_docs":3,"-providers-brave":100,"-providers-brave-surround":546},[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":99},"Providers","\u002Fproviders","2.providers\u002F0.index",[49,51,55,59,63,67,71,75,79,83,87,91,95],{"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","i-lucide-library",{"id":101,"title":52,"body":102,"description":539,"extension":540,"links":541,"meta":542,"navigation":167,"path":53,"seo":544,"stem":54,"__hash__":545},"docs\u002F2.providers\u002F01.brave.md",{"type":103,"value":104,"toc":532},"minimark",[105,109,114,294,310,314,350,376,380,432,436,518,522,528],[106,107],"provider-facts",{"provider":108},"brave",[110,111,113],"h2",{"id":112},"address-it","Address it",[115,116,121],"pre",{"className":117,"code":118,"language":119,"meta":120,"style":120},"language-ts shiki shiki-themes github-light github-light poimandres","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","",[122,123,124,162,169,206,252],"code",{"__ignoreMap":120},[125,126,129,133,137,141,144,148,152,156,159],"span",{"class":127,"line":128},"line",1,[125,130,132],{"class":131},"sP0CR","import",[125,134,136],{"class":135},"sKlNE"," {",[125,138,140],{"class":139},"snHMy"," create",[125,142,143],{"class":135}," }",[125,145,147],{"class":146},"stCPd"," from",[125,149,151],{"class":150},"scVjq"," \"",[125,153,155],{"class":154},"sQ7BG","@agntn\u002Fweb",[125,157,158],{"class":150},"\"",[125,160,161],{"class":135},";\n",[125,163,165],{"class":127,"line":164},2,[125,166,168],{"emptyLinePlaceholder":167},true,"\n",[125,170,172,176,180,183,187,190,193,195,197,199,202],{"class":127,"line":171},3,[125,173,175],{"class":174},"s1TYA","const",[125,177,179],{"class":178},"saoiD"," brave",[125,181,182],{"class":174}," =",[125,184,186],{"class":185},"sZW6a"," await",[125,188,140],{"class":189},"sULi6",[125,191,192],{"class":135},"(",[125,194,158],{"class":150},[125,196,108],{"class":154},[125,198,158],{"class":150},[125,200,201],{"class":135},"); ",[125,203,205],{"class":204},"sjhu3","\u002F\u002F BRAVE_API_KEY\n",[125,207,209,211,214,216,218,221,224,227,229,231,234,236,239,242,245,249],{"class":127,"line":208},4,[125,210,175],{"class":174},[125,212,213],{"class":178}," results",[125,215,182],{"class":174},[125,217,186],{"class":185},[125,219,179],{"class":220},"spVlQ",[125,222,223],{"class":135},".",[125,225,226],{"class":189},"search",[125,228,192],{"class":135},[125,230,158],{"class":150},[125,232,233],{"class":154},"typescript runtimes",[125,235,158],{"class":150},[125,237,238],{"class":135},", {",[125,240,241],{"class":139}," maxResults",[125,243,244],{"class":135},":",[125,246,248],{"class":247},"siHFe"," 10",[125,250,251],{"class":135}," });\n",[125,253,255,257,260,262,264,266,268,270,272,274,276,278,280,283,285,287,290,292],{"class":127,"line":254},5,[125,256,175],{"class":174},[125,258,259],{"class":178}," recent",[125,261,182],{"class":174},[125,263,186],{"class":185},[125,265,179],{"class":220},[125,267,223],{"class":135},[125,269,226],{"class":189},[125,271,192],{"class":135},[125,273,158],{"class":150},[125,275,233],{"class":154},[125,277,158],{"class":150},[125,279,238],{"class":135},[125,281,282],{"class":139}," startPublishedDate",[125,284,244],{"class":135},[125,286,151],{"class":150},[125,288,289],{"class":154},"2026-06-01",[125,291,158],{"class":150},[125,293,251],{"class":135},[295,296,297,298,301,302,305,306,309],"p",{},"The key goes in the ",[122,299,300],{},"X-Subscription-Token"," header. Pass ",[122,303,304],{},"apiKey"," to ",[122,307,308],{},"create()"," if you do not want env involved.",[110,311,313],{"id":312},"what-it-reads","What it reads",[315,316,317,330],"table",{},[318,319,320],"thead",{},[321,322,323,327],"tr",{},[324,325,326],"th",{},"Call",[324,328,329],{},"Endpoint",[331,332,333],"tbody",{},[321,334,335,340],{},[336,337,338],"td",{},[122,339,226],{},[336,341,342,345,346,349],{},[122,343,344],{},"GET \u002Fres\u002Fv1\u002Fweb\u002Fsearch?q=…&count=…&offset=…&extra_snippets=true&text_decorations=false"," on api.search.brave.com, plus ",[122,347,348],{},"freshness=YYYY-MM-DDtoYYYY-MM-DD"," when a date bound is set",[295,351,352,355,356,359,360,363,364,367,368,371,372,375],{},[122,353,354],{},"count"," is ",[122,357,358],{},"maxResults",", 20 at most. ",[122,361,362],{},"offset"," comes from the continuation and steps through pages of that size. ",[122,365,366],{},"query.more_results_available"," in the response decides whether the next token is ",[122,369,370],{},"next"," or ",[122,373,374],{},"end",", so Brave is one of the few engines that actually tells you.",[110,377,379],{"id":378},"what-comes-back","What comes back",[295,381,382,385,386,389,390,393,394,397,398,385,401,404,405,408,409,412,413,416,417,420,421,424,425,428,429,223],{},[122,383,384],{},"snippet"," is the ",[122,387,388],{},"description"," with Brave's HTML escapes decoded. ",[122,391,392],{},"favicon"," comes from ",[122,395,396],{},"meta_url.favicon",", and ",[122,399,400],{},"text",[122,402,403],{},"extra_snippets"," joined with newlines when Brave sends them. ",[122,406,407],{},"publishedDate"," is Brave's ",[122,410,411],{},"page_age",", the page's published or last modified date as Brave read it, so it can be missing. ",[122,414,415],{},"startPublishedDate"," and ",[122,418,419],{},"endPublishedDate"," go out as ",[122,422,423],{},"freshness",", the only filter Brave has here. No score, and ",[122,426,427],{},"includeDomains"," and friends come back in ",[122,430,431],{},"ignoredFilters",[110,433,435],{"id":434},"gotchas","Gotchas",[437,438,439,443,477,488,508],"ul",{},[440,441,442],"li",{},"A page is 20 results max. Ask for more and you get 20 plus a continuation.",[440,444,445,446,449,450,453,454,456,457,460,461,460,464,467,468,470,471,416,474,476],{},"Brave bolds query terms with ",[122,447,448],{},"\u003Cstrong>"," unless you send ",[122,451,452],{},"text_decorations=false",", and it escapes ",[122,455,388],{}," like HTML (",[122,458,459],{},"&#x27;",", ",[122,462,463],{},"&amp;",[122,465,466],{},"&quot;","). The adapter turns the bolding off and decodes the escapes, so ",[122,469,384],{}," is plain text. ",[122,472,473],{},"title",[122,475,403],{}," come as text already.",[440,478,479,480,483,484,487],{},"The free plan is a couple of thousand queries a month and a burst gets you a 429 with ",[122,481,482],{},"Retry-After",", which is ",[122,485,486],{},"RateLimitError"," here.",[440,489,490,492,493,496,497,500,501,416,504,507],{},[122,491,423],{}," wants ",[122,494,495],{},"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 ",[122,498,499],{},"1970-01-01"," and a missing end becomes today's UTC date. The open forms ",[122,502,503],{},"2026-06-01to",[122,505,506],{},"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.",[440,509,510,511,514,515,517],{},"Brave only fills extra snippets on a Search plan. A free key still takes ",[122,512,513],{},"extra_snippets=true"," and leaves ",[122,516,400],{}," empty.",[110,519,521],{"id":520},"where-it-lives","Where it lives",[295,523,524,527],{},[122,525,526],{},"src\u002Fproviders\u002Fbrave.ts",". Smallest search adapter with pagination, copy it when you write a new one.",[529,530,531],"style",{},"html pre.shiki code .sP0CR, html code.shiki .sP0CR{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .snHMy, html code.shiki .snHMy{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#ADD7FF}html pre.shiki code .stCPd, html code.shiki .stCPd{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .s1TYA, html code.shiki .s1TYA{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#91B4D5}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}html pre.shiki code .siHFe, html code.shiki .siHFe{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#5DE4C7}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":120,"searchDepth":164,"depth":164,"links":533},[534,535,536,537,538],{"id":112,"depth":164,"text":113},{"id":312,"depth":164,"text":313},{"id":378,"depth":164,"text":379},{"id":434,"depth":164,"text":435},{"id":520,"depth":164,"text":521},"The Brave Search API, one GET per page, with extra snippets joined into text and a continuation that carries the offset.","md",null,{"icon":543},"i-simple-icons-brave",{"title":52,"description":539},"SO8DBst0c0pVQxRbVplRN9OTHDXnHIsFmyjBj3Xq8BA",[547,549],{"title":50,"path":46,"stem":47,"description":548,"children":-1},"Twelve 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":550,"children":-1},"The Context.dev API for search with Markdown ranked by relevance and for scraping pages into Markdown or HTML.",1790041406825]