usage.bytes_returned, the size of the serialized response.
The same shaped search on every surface:
CAESAR_API_KEY. The MCP tool exposes no budget — a fixed 20,000-character server cap is its outer guardrail (see the remote MCP server).
Verbosity presets
response.verbosity is a string enum — ids_only, compact, standard, full — parsed case-insensitively. Presets are cumulative:
Extended metadata is part of
standard, not full. The only thing full adds over standard is the per-result provenance block. standard matches the pre-shaping default, so a request without a response block is unchanged. score is an object of the form {"value": 0.87} and is present from compact up only when a reranking stage scored the result.ids_only is available on REST, the SDKs, and the CLI — not over MCP or the AI SDK tools; it is the cheap probe shape for re-ranking, dedupe, and query-variant evaluation, and pairs well with /v1/feedback.
Budgets and trimming order
budget.max_chars_total (minimum 1) caps the serialized response body in characters — roughly 4 characters per token. The guarantee covers the final body you receive, including the truncation warning and the usage block. budget.on_exceed is shed (default) or error; shed means the server trims lower-priority fields until the response fits. With error, no trimming occurs and the request fails with HTTP 400, code response_too_large. Verbosity projection is applied first, then the budget is enforced.
When the budget binds under shed, payload is removed in this exact order, re-measuring after each step:
passages— lowest-ranked result first, last passage first, one at a timesnippets— snippets over 200 characters trimmed to 200 plus an ellipsisprovenance— dropped across all resultsextended_metadata— metadata trimmed back topublished_atandlast_crawled_atdescription— dropped across all resultstail_results— trailing results dropped, never below one result
"truncated": true on the envelope and appends one response_truncated warning whose message is the format Budget N chars: shed X, Y. — the names above are the exact strings in details.shed_levels:
budget_unsatisfiable warning (“A single result with invariant fields exceeds the N character budget; returning it anyway.”). You never get an empty 200, and a response is never an error just for being big.
What always survives
Identifiers are invariant at every verbosity-and-budget combination:request_id, search_id, session_id, and per result rank, doc_id, canonical_url, title, plus warnings, usage, and the truncated flag. The leanest possible response still carries enough fields to fetch everything else later via /v1/document.
What each shape costs
Estimates for an 8-result search (results typically carry 2–4 passages each; only the MCP surface caps passages at 2 per result):
A 4–13x spread per call, multiplied by agent-loop length. Only the caller knows which row a step needs: a “find the right document” step wants IDs plus snippets and follows with a read; a “quote evidence” step wants the passages.
Invalid values by surface
On REST, an unrecognizedresponse.verbosity does not fail the request: the server uses standard and appends an unknown_field warning (“response.verbosity value is not recognized; using standard.”, with details.field and details.value). At MCP, ids_only and any unknown response_format silently coerce to compact with no warning. The CLI rejects invalid --format values locally with exit code 2.
Scope
Shaping via theresponse block applies to /v1/search only. POST /v1/document takes no response block — document payloads are shaped by include sections, content.max_chars, and content.range continuation reads instead (see Documents).
Full request schemas live in the API reference.