POST /v1/search runs ranked retrieval over canonical web documents. Every result includes a doc_id and canonical_url you can pass straight to /v1/document, plus provenance fields you can cite when you need auditability.
CAESAR_API_KEY; see authentication for key setup.
Reranking is a modular second stage and never fails a request: if it is unavailable, results fall back to first-stage order with warning rerank_unavailable and ranking.ranker_version reports first_stage_order_v1.
Query and query variants
query is the only required field — the original user or agent question. search_queries optionally supplies your own rewrites as an array of strings: the first entry, when non-empty, replaces query as the candidate first-stage query, and the full list is given as context to the server-side query transform. If your agent already produced good rewrites, send them — you skip the server-side rewrite step.
max_results
max_results is an integer from 1 to 50, default 10. It is the complete result window — there is no cursor or offset pagination. The server fills the window itself by paging first-stage retrieval internally and deduplicating URLs, so asking for 50 returns the largest available result window; you never page manually.
You may still receive fewer than max_results when sources run dry. That is not an error and does not set the envelope truncated flag — truncated refers only to response-shaping budget sheds.
Filters
Freshness policy
Source policy
Domain matching is host-suffix based:
example.com matches example.com and any subdomain; a leading www. is ignored. When the policy removes results, the response carries warning source_policy_filtered with details.filtered_results counting what was dropped — so a thin result set is explainable rather than silent.
The ranking block
Successful responses include aranking object describing how results were ordered:
Replayed searches may be served from cache; deterministic ordering, identical scores, and identical
search_id values are not guaranteed across calls.
Analytics request field
client_model is accepted for analytics and tuning, but is not forwarded into retrieval. Sending it is harmless; expecting retrieval behavior from it is a bug.
A full request
Every implemented request field in one call (theresponse block is covered in response shaping):
cURL
The response
Trimmed to one result, at the defaultstandard verbosity:
search_ididentifies the ranked list and can be used with/v1/feedback.session_idechoes yours or is server-generated — see sessions.- Per-result
provenance(capture_id,capture_time) appears only atresponse.verbosity: "full"— the defaultstandardomits it. See response shaping. - Error responses use a shared envelope with stable machine codes — see errors. Full field schemas live in the API reference.