Bocha Web Search API compatible
Change the address, keep the code.
SpecStream answers Bocha's POST /v1/web-search in Bocha's own JSON, at $0.005 a search of up to 10 results, page summaries included. Every line below was measured on production on November 10, 2026.
The switch is one address: https://api.specstream.ai/bocha/v1/web-search in place of https://api.bochaai.com/v1/web-search, and a SpecStream key as the Bearer token. Your code reads data.webPages.value[] as before.
SpecStream scores 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks. New accounts get $10 of credit, no card.
New accounts get $10 of credit, no card. It covers 2,000 searches.
Bocha Web Search API to SpecStream, parameter by parameter and field by field
| SpecStream | Bocha Web Search API | |
|---|---|---|
| Address | POST https://api.specstream.ai/bocha/v1/web-search | POST https://api.bochaai.com/v1/web-search |
| The key | A SpecStream key as Authorization: Bearer | A Bocha key as Authorization: Bearer |
| `count` | 1 to 50, 10 when you send none | 1 to 50, default 10 |
| `freshness` | noLimit, oneDay, oneWeek, oneMonth, oneYear, one day as YYYY-MM-DD, or a range as YYYY-MM-DD..YYYY-MM-DD | noLimit by default, oneYear, oneMonth, oneWeek, oneDay, YYYY-MM-DD or YYYY-MM-DD..YYYY-MM-DD |
| `summary` | true adds each page's text as summary, at no extra cost | Bocha's MCP server sends summary true on every search |
| The reply | code, log_id, msg and data with _type, queryContext.originalQuery and webPages (totalEstimatedMatches and value[] with id, name, url, displayUrl, snippet, summary, siteName, datePublished) | data.webPages.value[], from which the MCP server reads name, url, summary, datePublished and siteName |
| Bocha's own MCP request | summary true, freshness noLimit and count 10 return 10 results, each with name, url, summary, datePublished and siteName | summary, freshness and count, with a 10 second timeout |
The Bocha Web Search API reference, on SpecStream
The call, before and after
# Before
curl -X POST https://api.bochaai.com/v1/web-search \
-H "Authorization: Bearer $BOCHA_API_KEY" -H "Content-Type: application/json" \
-d '{"query": "Who founded Mistral AI and when?", "count": 10, "summary": true}'
# After
curl -X POST https://api.specstream.ai/bocha/v1/web-search \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"query": "Who founded Mistral AI and when?", "count": 10, "summary": true}'The body and the parser stay. The host changes to api.specstream.ai/bocha, and the key changes. Every parameter and field on this page is in the pass table, measured on production on November 10, 2026.
Apps and SDKs that take the address as a setting
Each line was run on production on November 10, 2026 through that client's own request and reply code. Put your SpecStream key wherever the client takes its key.
Cherry Studio: in the Bocha provider, set API host to https://api.specstream.ai/bocha.
Every parameter the route uses
Used in the search: query, count (1 to 50), freshness (noLimit, oneDay, oneWeek, oneMonth, oneYear, a day or a range of days), and include and exclude, sites apart by | or ,.
Used to shape the reply: summary true fills each result's summary with the text of its page. Every other result field is filled on every call.
Every field that comes back
The reply has code 200, log_id, msg and data with _type SearchResponse, queryContext.originalQuery and webPages.totalEstimatedMatches. Each item of webPages.value has id, name, url, displayUrl, snippet, siteName and datePublished, plus summary when you ask for it.
Not returned: webPages.webSearchUrl, someResultsRemoved, and on each item siteIcon, dateLastCrawled, cachedPageUrl, language, isFamilyFriendly and isNavigational; images and videos are not returned either.
One field is added: specstream, with what the Search API returns beyond Bocha's fields, including the call's price_usd. A parser that reads Bocha's fields never sees it.
$5 per 1,000 searches, summaries included
A call of up to 10 results costs $0.005, with or without summary. Each started block of 10 more results adds $0.006: count 20 costs $0.011 and count 50 costs $0.029. A call stopped by a 429 charges nothing, and credit you buy never expires.
The most accurate web search API, in about one second
On SimpleQA Verified the SpecStream Search API scores 97.9 F-score on all 1,000 official questions, 978 of them correct. On WideSearch it scores 64.0 item F1 and 43.4 row F1 on all 200 official tasks. The Extract API scores 0.908 F1 on WCXB. Every score and its method is on the benchmarks page.
A call without summary runs the fast search. Measured on production on November 9, 2026, its median was 0.82 s at 1 search a second and 1.07 s at 20 a second, the 95th percentile stayed between 1.09 and 1.73 s, and it answered 718 of 720. It takes up to 8,800 searches a minute on one account. A call with summary true runs the default search, which reads the pages, at the same price.
You decide what is kept, on each key
Create the key with zero_retention and a search made with it keeps no request text and no answer after the reply: it is not in the history, its answer is not reused for another call, and its log lines carry neither. spend_cap_cents is the most the key can spend.
curl -X POST https://api.specstream.ai/v1/account/keys \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "production", "scopes": ["account:read", "finds:spend"], "spend_cap_cents": 500000, "zero_retention": true}'Search, pages and rows on one key
The same key reads up to 20 pages or documents a call with the Extract API at $0.80 per 1,000 pages, and a page with no text is not charged. Deep Search returns every match for a request in plain words as structured rows, at 5¢, 15¢ or $1 a row, with a source URL on every value. The most a run can cost is approved before it starts.
What else Bocha Web Search API users price
Exa
A search API on Exa's own index, at $7 per 1,000 requests on auto and $4 on lite for up to 10 results, with its own request and reply. SpecStream answers Exa's call as well, at https://api.specstream.ai/exa, for $0.005 a search.
Tavily
A search API sold in credits at $0.008 each pay as you go: a basic search takes 1 credit and an advanced search 2. SpecStream answers Tavily's POST /search at https://api.specstream.ai/tavily for $0.005, basic or advanced.
Brave Search API
A search API on Brave's own index at $5 per 1,000 requests, with $5 in free credits every month and 50 queries per second. SpecStream answers Brave's call at https://api.specstream.ai/res/v1/web/search at the same price per call and takes up to 8,800 searches a minute on one account.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to migrate, step by step
1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 2,000 searches.
2. Set the host to https://api.specstream.ai/bocha where your code has https://api.bochaai.com, and send the SpecStream key as the Bearer token. In Python:
import requests
BASE = "https://api.specstream.ai/bocha" # was https://api.bochaai.com
reply = requests.post(
f"{BASE}/v1/web-search",
headers={"Authorization": f"Bearer {SPECSTREAM_KEY}"},
json={"query": "Who founded Mistral AI and when?", "count": 10, "freshness": "oneYear", "summary": True},
timeout=30,
)
reply.raise_for_status()
for page in reply.json()["data"]["webPages"]["value"]:
print(page["name"], page["url"], page["siteName"], page["datePublished"])3. In JavaScript:
const res = await fetch("https://api.specstream.ai/bocha/v1/web-search", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SPECSTREAM_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ query: "Who founded Mistral AI and when?", count: 10 }),
});
const data = await res.json();
for (const page of data.data.webPages.value) console.log(page.name, page.url);4. Read 402 as an empty balance and 429 as a call to send again after Retry-After; neither is charged.
5. When your product needs every match in place of a results page, write the request in plain words. SpecStream reads it back as the conditions every row must meet and the facts to bring back, quotes the most it can cost, and delivers the rows after you approve.
Frequently asked questions
Something we didn't answer? Talk to a human
Is there a Bocha Web Search API compatible API?
POST /v1/web-search at https://api.specstream.ai/bocha/v1/web-search in Bocha's JSON, checked on production on November 10, 2026, for $0.005 a search of up to 10 results.How do I migrate from the Bocha Web Search API?
https://api.specstream.ai/bocha in place of https://api.bochaai.com, and a SpecStream key as the Bearer token. The body and the code that reads data.webPages.value[] stay as they are.How much does SpecStream cost for a Bocha call?
summary included, and $0.029 for count 50. New accounts get $10 of credit with no card, which covers 2,000 searches.Which apps and SDKs take the SpecStream address for Bocha Web Search API?
https://api.specstream.ai/bocha.Does the summary field work?
summary true, 10 of 10 results came back with page text in summary in the pass table, at the same $0.005 a call.Does Bocha's MCP server's request work?
summary true, freshness noLimit and count 10, returned 10 results with every field the server reads: name, url, summary, datePublished and siteName.Which Bocha fields does SpecStream not return?
siteIcon, dateLastCrawled, cachedPageUrl, language, isFamilyFriendly and isNavigational, plus images and videos. Each result has name, url, snippet, siteName and datePublished.What happens when search is busy?
429 with a Retry-After header and charges nothing. One account can send up to 8,800 searches a minute.Sources
SpecStream wrote this page. Each Bocha fact comes from Bocha's own MCP server source, and each other provider's figure from that company's own page. The route's behavior is taken from its code and from the pass table measured on production on November 10, 2026.
- Bocha MCP server sourceraw.githubusercontent.com/BochaAI/bocha-search-mcp/master/src/bocha_search_mcp/server.py, read Nov 10, 2026
- Bocha open platformopen.bochaai.com, read Nov 10, 2026
- SpecStream pass table, Bocha routespecstream.ai/specstream/dialects/bocha.md, read Nov 10, 2026
- Exa pricingexa.ai/docs/admin/pricing.md, read Nov 9, 2026
- Tavily API creditsdocs.tavily.com/documentation/api-credits.md, read Nov 9, 2026
- Brave Search APIbrave.com/search/api/, read Nov 9, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
- SpecStream pricingspecstream.ai/pricing, read Nov 10, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026




