Two search modes
/v1/public/search
Use this endpoint when you want only ranked search results.
- Google is the default provider
- both
GETandPOSTare available —GETtakesqas a query parameter,POSTtakes the same fields as a JSON body - results are optimized for speed and lower cost
- no LLM call is made
/v1/public/search/answer
Use this endpoint when you want an attributed answer synthesized from fetched result documents.
POSTonly- Google only in v1
- defaults to the top 3 results
- returns
answer.status = "not_configured"if no LLM is available
Answer behavior
Grounded answer mode:- runs the Google SERP query
- fetches the top result documents
- extracts readable content
- asks the configured LLM to answer only from that evidence
- returns citations with URLs and short supporting quotes
Choosing the right mode
- Use
/searchfor retrieval pipelines, ranking, or your own downstream synthesis. - Use
/search/answerwhen you want the API to perform the first-pass synthesis and attribution for you.
Cost and control
/searchis the cheaper path/search/answercosts more because it fetches source documents and may call an LLM- both endpoints still support the shared job fields such as
wait,cacheTtlSec, andfresh
Provider control, diagnostics and deadlines
UsestrictProvider: true to honor the selected engine throughout a search.
Google recovery attempts remain on Google, and strict DuckDuckGo disables the
direct Bing fallback. Defaults preserve the existing provider routing.
/v1/public/search. GET accepts strictProvider=true,
includeDiagnostics=true and timeoutMs=10000 query parameters. Flags accept
only booleans (GET uses true or false). timeoutMs is a positive integer,
up to 600000; GET also accepts a JSON options parameter instead of timeoutMs.
An opted-in terminal response contains data.meta.searchDiagnostics, on both
success and failure. It includes requestedProvider, effectiveProvider,
jobId, and routes with each attempt’s provider, route, status and optional
errorKind. Provider error messages and internal service addresses are omitted.
effectiveProvider on a failure identifies the last attempted engine, without
claiming it returned evidence. Cached results identify the cache route.
A failed job remains data.status = "failed" with data.error, even when HTTP
status is 200. A confirmed empty search remains successful with results: [];
engine outages and invalid/challenge bodies are failures. Search failures are
excluded from the stable target negative cache.
options.timeoutMs on search and /v1/public/scrape bounds the durable job from
its creation, including queue wait, retries, retrieval routes and content fetches.
Each child receives the remaining budget. Requesting a longer budget cannot
extend the service’s per-call ceiling. A client disconnect stops waiting but does
not cancel a durable job; an explicit request budget still expires that job.
waitTimeoutMs controls how long the public connection waits for that job.
Wikipedia article retrieval sends the existing identifying research User-Agent.
When a permitted article fetch returns a challenge, it can recover the verified
article and its canonical redirect URL through the official
MediaWiki article API.
The policy follows Wikimedia’s
User-Agent guidance.
Robots, login and SSRF denials remain terminal. Empty HTML, wrong article identity
or an API error never becomes usable evidence.