Yandex Search API compatible
Change the address.
Since November 10, 2026 SpecStream answers the Yandex Search API's POST /v2/web/search with Yandex's own reply: the yandexsearch XML document, Base64 in rawData. A search of up to 10 results costs $0.005, with no Yandex Cloud folder to set up.
The switch is one line: https://api.specstream.ai/yandex in place of https://searchapi.api.cloud.yandex.net, and a SpecStream key in Authorization: Api-Key. The request body and your XML parser stay.
The SpecStream Search API scores 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on WideSearch. A new account gets $10 of credit, no card.
New accounts get $10 of credit, no card. It covers 2,000 searches.
Yandex Search API to SpecStream, parameter by parameter and field by field
| SpecStream | Yandex Search API | |
|---|---|---|
| Address | POST https://api.specstream.ai/yandex/v2/web/search | POST https://searchapi.api.cloud.yandex.net/v2/web/search |
| The key | A SpecStream key as Authorization: Api-Key, or as Bearer | A Yandex Cloud API key as Authorization: Api-Key, or an IAM token as Bearer |
| Parameters applied | query.queryText, query.searchType, query.page, query.familyMode, groupSpec.groupsOnPage (1 to 100), period, resultsWithin and sortSpec.sortMode | The same, plus region, l10n, maxPassages, docsInGroup and responseFormat |
| Reply | {"rawData": "<Base64>"}, the yandexsearch XML with request, found, reqid and each group with doc url, domain, title and a passage | rawData with the XML or HTML results document |
| Errors | Yandex Cloud's own {"code", "message", "details"}: 400 for a queryText over 400 characters or FORMAT_HTML, 401 for no key. A busy call gets 429 with Retry-After and is not charged | queryText at most 400 characters |
| Price | $0.005 a search of up to 10 results, $5 per 1,000. Each started block of 10 more results adds $0.006 | $4.00 per 1,000 synchronous requests by day, $3.00 at night, without VAT. One request is the billing unit |
| Account | A SpecStream key. Credit you buy never expires | A Yandex Cloud folder, named in folderId |
| Free to start | $10 of credit, no card, which covers 2,000 searches | Billed from the first request |
| Pages behind the results | Read on the same key at $0.0008 a page with the Extract API | A search API |
The Yandex Search API reference, on SpecStream
The call, before and after
# Before
curl -X POST "https://searchapi.api.cloud.yandex.net/v2/web/search" \
-H "Authorization: Api-Key $YANDEX_API_KEY" -H "Content-Type: application/json" \
-d '{"query": {"searchType": "SEARCH_TYPE_COM", "queryText": "pizza"}, "folderId": "<folder>"}'
# After
curl -X POST "https://api.specstream.ai/yandex/v2/web/search" \
-H "Authorization: Api-Key $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"query": {"searchType": "SEARCH_TYPE_COM", "queryText": "pizza"}, "folderId": "<folder>"}'The reply is Yandex's: {"rawData": "PD94bWwg..."}. Decoded, it is the yandexsearch document your parser already reads: request with query, page, sortby and groupings, then response with reqid, found, found-human and results/grouping, one group per result.
Yandex's Python SDK, yandex-ai-studio-sdk, speaks gRPC and has no REST address setting, so the switch is in your own HTTP call: the address and the key. folderId can stay in the body.
What the route reads, and what it refuses
Applied: query.queryText, query.searchType as the search's country and language (SEARCH_TYPE_RU, TR, COM, KK, BE, UZ), query.page, query.familyMode, groupSpec.groupsOnPage from 1 to 100, period and the older resultsWithin, and sortSpec.sortMode with SORT_MODE_BY_TIME for dated results newest first. A call that names no count reads 10.
Refused, in Yandex Cloud's own {"code", "message", "details"} body: a queryText over 400 characters gets 400, as on Yandex, responseFormat FORMAT_HTML gets 400 with a message that names FORMAT_XML, and a call with no key gets 401. Every parameter was measured on production on Nov 10, 2026, and the full pass table lists each one and its result.
The route answers the synchronous search. The deferred form, searchAsync and its operation, is not served.
Every field that comes back
In the XML: request with query, page, sortby, maxpassages and groupings/groupby, and response with its date, reqid, found, found-human and results/grouping with found, found-docs, found-docs-human and page. Each group has categ, doccount, relevance and a doc with url, domain, title and passages/passage. A search with no results carries Yandex's error code 15.
The route does not return misspell, reask, doc@id, headline, size, charset, properties, mime-type or saved-copy-url, and relevance is empty. modtime comes back when the source gave a date.
One price a search, on one key
On SpecStream a search of up to 10 results costs $0.005, which is $5 per 1,000, each started block of 10 more adds $0.006, and a busy call gets 429 with Retry-After and charges nothing. There is no folder or IAM token to set up, the same key reads the page behind any result at $0.0008, and credit you buy never expires.
Speed, measured on production
On November 9, 2026 the fast search every drop-in route uses had a median of 0.82 s at 1 search a second and 1.07 s at 20 a second, with the 95th percentile between 1.09 and 1.73 s, and answered 718 of 720 calls. There is no limit per key and no daily limit.
Scored on the official benchmarks
The SpecStream Search API scores 97.9 F-score on all 1,000 SimpleQA Verified questions, 978 of them correct, and 64.0 item F1 and 43.4 row F1 on all 200 WideSearch tasks. The Extract API scores 0.908 F1 on WCXB. Every score and its method is on the benchmarks page.
You decide what is kept, on each key
Create the key with zero_retention and a call made with it keeps no request text and no answer after the reply. 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}'Pages, search 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. 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.
What else Yandex Search API users price
Brave Search API
A search API on Brave's own index at $5 per 1,000 requests. SpecStream answers Brave's call at https://api.specstream.ai/res/v1/web/search and reads the pages behind the results on the same key.
Serper
Google results as JSON, in credit packs from $1.00 per 1,000 that are valid for 6 months. SpecStream answers Serper's call at https://api.specstream.ai/serper, and its credit never expires.
SerpApi
Search engine result pages as JSON, sold by monthly plan: Starter is $25 a month for 1,000 searches. On SpecStream $25 pays for 5,000 searches.
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 address to https://api.specstream.ai/yandex where your code has https://searchapi.api.cloud.yandex.net, and send the SpecStream key as Authorization: Api-Key. In Python:
import base64
import xml.etree.ElementTree as ET
import requests
BASE = "https://api.specstream.ai/yandex" # was https://searchapi.api.cloud.yandex.net
reply = requests.post(
f"{BASE}/v2/web/search",
headers={"Authorization": f"Api-Key {SPECSTREAM_KEY}"},
json={"query": {"searchType": "SEARCH_TYPE_COM", "queryText": "pizza"}, "groupSpec": {"groupsOnPage": 10}},
timeout=30,
)
reply.raise_for_status()
root = ET.fromstring(base64.b64decode(reply.json()["rawData"]))
for doc in root.iter("doc"):
print(doc.findtext("url"), doc.findtext("title"))3. In JavaScript:
const reply = await fetch("https://api.specstream.ai/yandex/v2/web/search", {
method: "POST",
headers: { Authorization: `Api-Key ${process.env.SPECSTREAM_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ query: { searchType: "SEARCH_TYPE_TR", queryText: "pizza" } }),
});
const { rawData } = await reply.json();
const xml = Buffer.from(rawData, "base64").toString("utf8");
console.log(xml.slice(0, 500));4. Read 429 as a call to send again after Retry-After. It is not charged.
Frequently asked questions
Something we didn't answer? Talk to a human
Is there a Yandex Search API compatible API?
POST /v2/web/search at https://api.specstream.ai/yandex with Yandex's XML document in rawData, as measured on production. A search costs $0.005.How do I migrate from the Yandex Search API?
https://searchapi.api.cloud.yandex.net becomes https://api.specstream.ai/yandex, and a SpecStream key goes in Authorization: Api-Key. queryText, searchType, page, familyMode, groupsOnPage, period and sortMode keep their meaning.How much does the Yandex Search API cost?
Does the Yandex AI Studio SDK work with SpecStream?
https://api.specstream.ai/yandex/v2/web/search with requests or fetch, as in the steps on this page, with the same body.Does SpecStream return Yandex's HTML results page?
FORMAT_HTML with 400 and a message that names FORMAT_XML.Which Yandex XML fields does SpecStream not return?
misspell, reask, doc@id, headline, size, charset, properties, mime-type and saved-copy-url. Each result keeps url, domain, title and a passage.Sources
SpecStream wrote this page. Each Yandex figure comes from Yandex's own pages, and each other provider's figure from that company's own page. The route's behavior comes from its code and the pass table measured on production.
- Yandex Search API pricingaistudio.yandex.ru/docs/en/search-api/pricing, read Nov 10, 2026
- Yandex Search API web searchaistudio.yandex.ru/docs/en/search-api/operations/web-search, read Nov 10, 2026
- SpecStream Yandex pass tablespecstream.ai/specstream/dialects/yandex.md, read Nov 10, 2026
- Brave Search APIbrave.com/search/api/, read Nov 10, 2026
- Serperserper.dev/, read Nov 10, 2026
- SerpApi pricingserpapi.com/pricing, read Nov 10, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026




