What this family does
Session ingestion is how Claude Code, Codex and similar clients feed Exo. One route accepts a single transcript line for a live tail, another accepts up to 500 events for a backfill, a third accepts client-detected agent failure signals, and a fourth reports progress. The finalize route is the one that matters most. Session ingestion writes nodes and chunks, but it does not build graph edges, domains, the identity extraction or the first cognition cycle. Finalize does.Routes
Headers that apply here
Neither header is declared as an OpenAPI parameter, so neither appears in the generated schema tables.X-Exo-Subjectis refused on the routes here that scope by the key owner. Sending it returns 400subject_not_supportedrather than reading the wrong partition.
The shape of a call
Send a batch, then finalize.Traps
Events deduplicate, so there is noIdempotency-Key here. Re-sending an event reports it as deduped instead of storing it twice. Per-event deduplication is stronger than per-request replay for a stream.
Call finalize, once, after the last batch. Skip it and the derived layers are never built. Call it twice and the second call is a no-op that returns alreadyInFlight.
Poll building, not warmLayers. The warm layers are data-dependent. An organization with no dated content never grows temporal phases, so waiting for every layer to turn true never finishes.
The family refuses X-Exo-Subject. Session data is scoped by the credential’s own user. An explicit selector is 400 subject_not_supported.
Related
API reference
Base URL, authentication, and the conventions every route shares.
Errors
The problem envelope and the full code catalogue.