The most accurate web search API in the world
Ask in plain words, in any language, and get an answer from the live web in a few seconds. One GET request returns the answer, the matching rows, and the search results read.
curl -G https://api.specstream.ai/v1/web-search \ -H "Authorization: Bearer $SPECSTREAM_API_KEY" \ --data-urlencode "q=Who is the CEO of Stripe?"
{
"data": {
"kind": "fact",
"query": "Who is the CEO of Stripe",
"answer": {
"value": "Patrick Collison",
"page": "https://en.wikipedia.org/wiki/Patrick_Collison",
"seen_at": "2026-11-05T01:06:52+00:00"
},
"rows": [
{
"name": "Patrick Collison",
"page": "https://en.wikipedia.org/wiki/Patrick_Collison",
"probability": 0.64
}
],
"sources": [
{
"url": "https://en.wikipedia.org/wiki/Patrick_Collison",
"title": "Patrick Collison - Wikipedia",
"site": "en.wikipedia.org",
"cited": true
},
{
"url": "https://www.forbes.com/profile/patrick-collison/",
"title": "Patrick Collison - Forbes",
"site": "forbes.com",
"cited": false
}
],
"took_ms": 2404,
"price_usd": 0.005
}
}The search API on WideSearch and SimpleQA Verified
The SpecStream search API leads both benchmarks.
| SpecStream | |||||
|---|---|---|---|---|---|
| Web researchWideSearch, GPT-5.6 Luna | 60.9 | 45.5 | 53.0 | 47.9 | 47.0 |
| Factual accuracySimpleQA Verified, GPT-5.6 Luna | 96 | 94 | 91 | 94 | 94 |
| Factual accuracySimpleQA Verified, GPT-5.6 Sol | 99 | 97 | 91 | 92 | 95 |
$5
per 1,000 searches
Each search comes out of your balance. It needs no quote and no approval.
- Any language
- Write q in plain words, up to 2,000 characters. Quoted phrases are searched as phrases.
- Idempotency-Key
- Send the header to retry safely. A call is charged once per key.
What a call returns
Each reply has a kind: fact for a question with one answer, list for a request with many results. Every charged call stays in your account's history, and reading the history costs nothing.
- answer
- The value, when the question has one answer. It stays null unless two sites print the value or it rates as likelier than not. Every value found stays in rows.
- rows
- Each result with its name, page, snippet, the probability that it matches, and the facts the request asks for. Source URL and read time on every value.
- sources
- The search results read, in rank order, each with its URL, title, site, snippet, and published date when the result gives one.
- handoff
- For a request with many results: the estimated size of the full set and the next call to make, which prices it as a Deep Search.
- passages
- Add passages=true to get the text of the top pages closest to the request, each with its URL and title. The call takes up to about a second more.
Search API questions
Something we didn't answer? Talk to a human
What makes it the most accurate web search API?
It leads WideSearch and SimpleQA Verified. Scores and method are on the benchmarks page.
How is a search charged?
Each call comes out of your balance at $5 per 1,000 searches, with no quote and no approval. A call stopped by a 503 is not charged. Wait the seconds in Retry-After and send it again.
What if my request has many results?
The reply has kind list, with the rows found so far and a handoff. The handoff gives the estimated size and the next call, and that call prices the full request as a Deep Search.
How do I call it?
Send GET /v1/web-search with your API key, or use search_web on MCP, web_search in Python, webSearch in TypeScript, or specstream web-search in the CLI.
Run your first search
Sign up and get $10 of credit, no card.