session_id. If you do not send one, the server generates a fresh UUID for that request and returns it:
How to send it
| Endpoint | Body field session_id | Header X-Session-ID |
|---|---|---|
POST /v1/search | yes | yes |
POST /v1/document | no — header only | yes |
POST /v1/feedback | yes | yes |
session_id and an X-Session-ID header are present, the body value is used. Set the header once in your HTTP client as a convenient default; override per request in the body when you need to.
400 validation_error — message session_id must be a UUID for the body field, X-Session-ID must be a UUID for the header.
What sessions are — and are not
Sessions provide continuity for ranking, telemetry, and abuse heuristics, and they give feedback its task context: asearch followed by a document read followed by feedback under one session_id reads as a single multi-step task.
What a session is not:
- Not server-side state. Sessions are not persisted as entities, and a supplied
session_idis never checked for “existence” — continuity is entirely caller-driven. Any valid UUID works. - Not authentication. A
session_idgrants nothing. Auth is the Bearer key — see Authentication. - Not a rate-limit key. Rate limits are keyed by API key or client IP; the session has no effect.
client_model
client_model is an optional string identifying the calling model (for example claude-fable-5), used for analytics and tuning. It appears in two places:
| Where | Field | Status |
|---|---|---|
POST /v1/search body | client_model (top level) | Accepted; reserved for analytics — not persisted today |
POST /v1/feedback body | agent_context.client_model | Persisted with the feedback event |
agent_context. The hosted MCP server sets client_model: "mcp" on searches it makes on your behalf. There is no header form of client_model.
X-Caesar-Client
First-party clients send an X-Caesar-Client: client/version header: cli/0.1.4, python-sdk/0.1.1, ts-sdk/0.1.1. It is an attribution convention, not a protocol — the server does not parse, validate, or store it today, and it changes no behavior. If you build an integration, sending yourtool/1.2.3 is encouraged:
session_id, there is no body equivalent and no precedence rule to think about.