Linkup compatible
Change the address, every depth at $0.005.
SpecStream answers Linkup's POST /v1/search in Linkup's own JSON, at $0.005 a search of up to 10 results at every depth, deep included. Every line below was measured on production on November 10, 2026 with the linkup-sdk Python client 0.24.0.
The switch is one line: base_url="https://api.specstream.ai/linkup/v1" in place of https://api.linkup.so/v1, and a SpecStream key as the Bearer token. Your code reads results[].name, url and content 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. A sourcedAnswer costs the same $0.005.
New accounts get $10 of credit, no card. It covers 2,000 searches.
Linkup search to SpecStream, parameter by parameter and field by field
| SpecStream | Linkup | |
|---|---|---|
| Address | POST or GET https://api.specstream.ai/linkup/v1/search | POST https://api.linkup.so/v1/search |
| The key | A SpecStream key as Authorization: Bearer | A Linkup key as a Bearer token in the Authorization header |
| `depth` | flash and fast return each result's search excerpt; standard and deep read each page and return up to about 3,500 characters of it. Every depth costs $0.005 | flash, fast or standard cost $0.005 with searchResults; deep costs $0.05 |
| `outputType` | searchResults, and sourcedAnswer with answer and sources[], at the same price. structured gets 400 with the reason | searchResults; sourcedAnswer or structured cost $0.006, or $0.055 at deep |
| `maxResults` | 1 to 100, 10 when you send none | A minimum of 1, and the number of results is never above maxResults |
| Filters | includeDomains, excludeDomains, and fromDate and toDate as YYYY-MM-DD. A fromDate after the toDate gets 400 | The same domain and date filters |
| The reply | results[] with type text, name, url, content, and favicon as an empty string. With sourcedAnswer: answer and sources[] with name, url and snippet | results[] with type, name, url, content and favicon, or answer and sources |
| Errors | Linkup's {"statusCode", "error": {"code", "message", "details"}}. An empty balance answers 429 INSUFFICIENT_FUNDS_CREDITS, as Linkup does. A busy call answers 429 with Retry-After and charges nothing | No credit is subtracted when an error occurs. An empty balance answers 429 |
| Rate limit | Up to 8,800 searches a minute on one account | 10 queries per second per organization |
| Free to start | $10 of credit, no card, which covers 2,000 searches | $20 of credit at sign up with a professional email address |
The Linkup search reference, on SpecStream
The call, before and after
# Before
curl -X POST https://api.linkup.so/v1/search \
-H "Authorization: Bearer $LINKUP_API_KEY" -H "Content-Type: application/json" \
-d '{"q": "Who founded Mistral AI and when?", "depth": "fast", "outputType": "searchResults"}'
# After
curl -X POST https://api.specstream.ai/linkup/v1/search \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"q": "Who founded Mistral AI and when?", "depth": "fast", "outputType": "searchResults"}'In the linkup-sdk Python client the change is the client line:
# Before
client = LinkupClient(api_key=LINKUP_API_KEY)
# After
client = LinkupClient(api_key=SPECSTREAM_API_KEY, base_url="https://api.specstream.ai/linkup/v1")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.
Open WebUI: choose the web search engine linkup and put the address in its JSON setting LINKUP_SEARCH_PARAMS: {"url": "https://api.specstream.ai/linkup/v1/search"}.
LiteLLM 1.108.4: set LINKUP_API_BASE to https://api.specstream.ai/linkup/v1 and put your SpecStream key in LINKUP_API_KEY. The call stays litellm.search(search_provider="linkup").
Every parameter the route uses
Used in the search: q, depth (flash, fast, standard or deep, required as on Linkup), maxResults (1 to 100), includeDomains, excludeDomains, fromDate and toDate. The same fields work as a GET with the query string.
Used to shape the reply: outputType searchResults returns results[], and sourcedAnswer returns answer with its sources[].
Refused with Linkup's 400 body: outputType structured, a call with no depth or no outputType, and a fromDate after the toDate. A call with no key gets 401.
Every field that comes back
With searchResults, each result has type text, name, url, content and favicon, which is an empty string. With sourcedAnswer, the reply has answer and sources[], each with name, url, snippet and an empty favicon. The route returns no image results.
One field is added: specstream, with what the Search API returns beyond Linkup's fields, including the call's price_usd. A parser that reads Linkup's fields never sees it.
$5 per 1,000 searches, at every depth
A call of up to 10 results costs $0.005 at flash, fast, standard and deep, with searchResults or sourcedAnswer. On Linkup a deep search costs $0.05, and $0.055 with an answer. Each started block of 10 more results adds $0.006 on SpecStream: 20 results cost $0.011. A call stopped by a 429 for a busy search charges nothing.
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 searchResults call at flash or fast 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 at standard or deep, or with sourcedAnswer, 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. The full comparison is on the Linkup alternative page.
What else Linkup users price
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.
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.
Parallel
A Search API that starts at $1 per 1,000 requests, with 600 Search calls a minute on the Developer plan. SpecStream answers Parallel's own call at https://api.specstream.ai/parallel 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 base address to https://api.specstream.ai/linkup/v1 where your code has https://api.linkup.so/v1, and send the SpecStream key as the Bearer token. In Python:
import requests
BASE = "https://api.specstream.ai/linkup/v1" # was https://api.linkup.so/v1
reply = requests.post(
f"{BASE}/search",
headers={"Authorization": f"Bearer {SPECSTREAM_KEY}"},
json={"q": "Who founded Mistral AI and when?", "depth": "deep", "outputType": "searchResults", "maxResults": 10},
timeout=60,
)
reply.raise_for_status()
for result in reply.json()["results"]:
print(result["name"], result["url"], result["content"][:200])3. In JavaScript:
const res = await fetch("https://api.specstream.ai/linkup/v1/search", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SPECSTREAM_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ q: "Who founded Mistral AI and when?", depth: "fast", outputType: "sourcedAnswer" }),
});
const data = await res.json();
console.log(data.answer);
for (const source of data.sources) console.log(source.name, source.url);4. Read 429 with INSUFFICIENT_FUNDS_CREDITS as an empty balance, and any other 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 Linkup compatible API?
/v1/search at https://api.specstream.ai/linkup/v1 in Linkup's JSON, checked on production on November 10, 2026, for $0.005 a search of up to 10 results at every depth.How do I migrate from Linkup?
base_url to https://api.specstream.ai/linkup/v1 and use a SpecStream key. The request body, with q, depth and outputType, and the code that reads results[] stay as they are.How much does Linkup cost?
flash, fast or standard with searchResults, $0.006 with an answer, and $0.05 to $0.055 at deep. SpecStream charges $0.005 for all of them.Which apps and SDKs take the SpecStream address for Linkup?
linkup and put the address in its JSON setting LINKUP_SEARCH_PARAMS: {"url": "https://api.specstream.ai/linkup/v1/search"}. LiteLLM 1.108.4: set LINKUP_API_BASE to https://api.specstream.ai/linkup/v1 and put your SpecStream key in LINKUP_API_KEY. The call stays litellm.search(search_provider="linkup").Does the linkup-sdk client work with SpecStream?
linkup-sdk Python client 0.24.0 ran every check in the pass table with base_url="https://api.specstream.ai/linkup/v1" and a SpecStream key.Does SpecStream support outputType structured?
outputType structured gets 400 with the reason; searchResults and sourcedAnswer both work, at $0.005 a call.Which Linkup fields does SpecStream not fill?
favicon is an empty string on every result and source. Each result has type, name, url and content, and a sourcedAnswer has answer and sources.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 Linkup figure comes from Linkup's own pages, 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.
- Linkup search referencedocs.linkup.so/pages/documentation/endpoints/search/reference.md, read Nov 10, 2026
- Linkup authenticationdocs.linkup.so/pages/documentation/platform/authentication.md, read Nov 10, 2026
- Linkup API pricingdocs.linkup.so/pages/documentation/platform/pricing.md, read Nov 10, 2026
- Linkup rate limitsdocs.linkup.so/pages/documentation/platform/rate-limits.md, read Nov 10, 2026
- Linkup pricinglinkup.so/pricing, read Nov 10, 2026
- SpecStream pass table, Linkup routespecstream.ai/specstream/dialects/linkup.md, read Nov 10, 2026
- Tavily API creditsdocs.tavily.com/documentation/api-credits.md, read Nov 9, 2026
- Exa pricingexa.ai/docs/admin/pricing.md, read Nov 9, 2026
- Parallel pricingparallel.ai/pricing, 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




