Skip to main content

Web Search API

Operator-gated public web search. Chat uses these endpoints for Auto / Web answer modes. The deployment gate is WEB_SEARCH_ENABLED (default false). See Chat.

Both routes require a valid X-API-Key from API_KEY_CLIENTS. Responses set Cache-Control: private, no-store.

Capabilities

GET /web-search/capabilities

Reports the deployment gate without running a search.

Headers

HeaderRequiredDescription
X-API-KeyYesValid API key from API_KEY_CLIENTS

Response

{
"enabled": false
}
FieldDescription
enabledtrue when WEB_SEARCH_ENABLED=true
curl http://localhost:8000/web-search/capabilities \
-H "X-API-Key: super-secret-key"
POST /web-search

Runs one exact-query public web search. Unknown body fields are rejected.

Headers

HeaderRequiredDescription
X-API-KeyYesValid API key from API_KEY_CLIENTS
Content-TypeYesapplication/json

Body

FieldTypeDefaultDescription
querystringrequiredExact query sent verbatim to the public provider (1–500 characters, not blank)
limitint5Maximum results to return (1–5)

Response

{
"results": [
{
"source": "web",
"title": "Example title",
"url": "https://example.com/page",
"snippet": "Short excerpt from the page.",
"rank": 1
}
],
"meta": {
"provider": "ddgs",
"status": "ok",
"count": 1,
"query_time_ms": 42
}
}
Result fieldDescription
sourceAlways "web"
titleResult title
urlResult URL
snippetShort excerpt
rank1-based rank
meta.statusMeaning
okProvider returned results
no_resultsProvider succeeded with an empty set
timeoutProvider timed out
rate_limitedProvider rate-limited the request
unavailableGate off, provider missing, or service unavailable
provider_errorProvider failed

Fail-open: a disabled gate, missing provider, provider error, or timeout still returns HTTP 200 with results: [] and a non-ok meta.status. Chat can then keep a document-backed answer instead of erroring.

curl -X POST http://localhost:8000/web-search \
-H "X-API-Key: super-secret-key" \
-H "Content-Type: application/json" \
-d '{"query": "acme earnings", "limit": 5}'

Status codes

CodeDescription
200Search or capabilities result (including fail-open empty results)
401Missing or invalid API key
422Invalid body (blank query, extra fields, limit out of range)
429API rate limit exceeded

When WEB_SEARCH_ENABLED=false, POST /web-search does not call the provider. It returns 200 with empty results and meta.status: "unavailable".