Skip to main content
Sessions

Session Schemas

Shared structures for Sessions, resources, events, and threads.

Session object

Returned by create, get, list, update, and archive endpoints.
FieldTypeDescription
idstringSession ID with the sess_ prefix
typestringAlways "session"
agentobjectAgent snapshot used by this Session. See Session embedded agent for the field shape
environment_idstringEnvironment ID used by this Session
statusstringSession lifecycle status: rescheduling, running, idle, canceling, or terminated. canceling is a transient state returned by the Cancel endpoint acknowledgement; poll the Session or listen for status events to observe the final state
titlestring | nullSession title
metadataobjectSession metadata
environment_variablesobjectSession-level environment variables exported into the agent runtime as a map of string keys to string values ({"NAME":"value"}). Empty Sessions return {}. See Create a Session
resourcesarray of Session resourceFile, GitHub repository, or Memory Store resources attached to the Session
vault_idsarray of stringVault IDs attached to the Session
deployment_idstring | nullDeployment ID when the Session was created by a Deployment, otherwise null
outcome_evaluationsarrayOutcome evaluation results. New Sessions return []
statsSession statsSession statistics
usageSession usageCumulative credits snapshot for recorded model calls. Omitted when usage data is unavailable
archived_atstring | nullArchive time, or null when not archived
created_atstringCreation time
updated_atstringLast update time
Session responses no longer include legacy fields such as agent_id, turn_status, or memory_store_ids.

Agent reference

agent in create requests can be either a string Agent ID or this object:
FieldTypeRequiredDescription
idstringYesAgent ID with the agent_ prefix
typestringYes (object form only)Must be the literal "agent". Missing or other values return 400 when the object form is used. The bare-string form (passing the Agent ID directly) skips this check
versionintegerNoAgent version to snapshot. Omit or pass 0 to use the latest active version

Session embedded agent

The agent returned inside a Session object is the Agent snapshot pinned to the Session, but several Agent fields are stripped before they are exposed:
  • created_at, updated_at — never included on the embedded Agent.
  • archived, archived_at — never included; the Session preserves access to the snapshot regardless of the source Agent's archive state.
  • metadata — Agent-level metadata is stripped; only Session-level metadata is exposed.
  • instructions — replaced by system.
For a coordinator multi-agent setup, agent.multiagent.agents[] is hydrated server-side from stub {type, id, version} references into full Agent definitions (see Multiagent roster element). Inside a Session Thread object, the agent field additionally drops the multiagent block — coordinator threads only carry the per-agent snapshot.

agent.model.effective_context_window

Sessions return an additional response-only effective_context_window (int64, in tokens) inside agent.model. It is the runtime-resolved context window the Session will use for this Agent (after applying environment-level overrides). Absent or non-positive values are omitted; clients should treat the field as informational.

Session resource

resources[] is a union distinguished by type.

File resource

FieldTypeRequiredDescription
idstringResponse onlyResource ID
typestringYes"file"
file_idstringYesFile ID with the file_ prefix. The file must be ready
mount_pathstringNoMount path in the container. Defaults to /mnt/session/uploads/<file_id> when omitted
created_atstringResponse onlyResource creation time
updated_atstringResponse onlyResource update time

GitHub repository resource

FieldTypeRequiredDescription
idstringResponse onlyResource ID
typestringYes"github_repository"
urlstringYesRepository URL
authorization_tokenstringYes (write only)GitHub token used to access the repository. It is not returned in responses
mount_pathstringNoClone target path in the container. Defaults from the repository name when omitted
checkoutobjectNoGit checkout target, for example {"type":"branch","name":"main"}
created_atstringResponse onlyResource creation time
updated_atstringResponse onlyResource update time

Memory Store resource

FieldTypeRequiredDescription
typestringYes"memory_store"
memory_store_idstringYesMemory Store ID with the memstore_ prefix
accessstring | nullNoOptional access mode. Allowed values: "read_write", "read_only". Empty string or omitted means default (no override)
instructionsstring | nullNoOptional instructions stored on the Session resource. Maximum 4096 characters
namestring | nullResponse onlyCurrent Memory Store name when available
descriptionstringResponse onlyCurrent Memory Store description when available
mount_pathstring | nullResponse onlyCurrent implementation returns null unless an existing resource snapshot contains a value
Memory Store resources do not include id, created_at, or updated_at fields.

Session stats

FieldTypeDescription
active_secondsnumberActive processing time in seconds. New Sessions start at 0
duration_secondsnumberSession duration in seconds. New Sessions start at 0

Session usage

usage is the cumulative snapshot for a Session:
FieldTypeDescription
total_creditsnumberCredits accumulated from all recorded model calls in the Session. Floored to at most 2 decimal places
A Session without usage data omits the usage field. Values are floored rather than rounded; for example, 7.6681 is returned as 7.66. JSON numbers do not preserve trailing zeroes, so 1.20 may be serialized as 1.2. Treat total_credits as a snapshot: overwrite a local value by Session ID instead of adding it again on every query.

Multiagent roster element

When the embedded Agent declares multiagent.type = "coordinator", every entry inside agent.multiagent.agents[] returned by Session endpoints is hydrated from the original stub references into a full Agent definition (subject to the same field stripping as the Session embedded agent, and additionally without its own multiagent field).
FieldTypeDescription
typestring"agent" for a sibling Agent reference, or "self" for the coordinator itself
idstringAgent ID. Present for type = "agent"; mirrors the coordinator's own ID when type = "self"
versionintegerPinned Agent version. Present for type = "agent"
namestringHydrated Agent name
descriptionstring | nullHydrated Agent description
systemstringHydrated Agent system prompt (replaces instructions)
modelstring | objectSame shape as on the embedded Agent, including effective_context_window when set
Other Agent fieldsvariesTools, MCP servers, skills, and other Agent fields, with the same field stripping rules as the embedded Agent
Stub references that fail to resolve (for example, the referenced Agent version no longer exists) are returned unchanged.

Event object

Events returned by send, list, and stream endpoints are event-specific JSON objects. Public event responses expose only the documented public fields for each event type.
FieldTypeDescription
idstringEvent ID with the evt_ prefix
typestringEvent type
processed_atstringPresent when the event has been processed. Many agent-generated events omit this field.
Depending on type, an event may also include fields such as content, input, name, tool_use_id, mcp_tool_use_id, custom_tool_use_id, result, deny_message, rubric, outcome_id, session_thread_id, stop_reason, error, usage, or model_usage.

Client event request types

POST /api/v1/cloud/sessions/{session_id}/events accepts exactly these client-sent event types:
TypeRequired fieldsNotes
user.messagecontentcontent must be a non-empty array of content blocks
user.interruptnonesession_thread_id is optional and is echoed as null when omitted
user.tool_confirmationtool_use_id, resultresult must be allow or deny; deny_message is optional
user.tool_resulttool_use_idUse this to return a built-in tool result from a self-hosted worker. content is optional; when present, it must be an array of content blocks. is_error is optional
user.custom_tool_resultcustom_tool_use_idcontent is optional; when present, it must be an array of content blocks. is_error is optional
user.define_outcomedescription, rubricrubric is an object such as {"type":"text","content":"..."} or {"type":"file","file_id":"file_..."}; max_iterations is optional

Public event types

List and stream endpoints can expose these event types: user.message, user.interrupt, user.tool_confirmation, user.custom_tool_result, user.define_outcome, user.tool_result, system.message, agent.custom_tool_use, agent.mcp_tool_result, agent.mcp_tool_use, agent.message, agent.thinking, agent.thread_context_compacted, agent.thread_message_received, agent.thread_message_sent, agent.tool_result, agent.tool_use, session.deleted, session.error, session.status_idle, session.status_rescheduled, session.status_running, session.status_terminated, session.thread_created, session.thread_status_idle, session.thread_status_rescheduled, session.thread_status_running, session.thread_status_terminated, session.updated, span.model_request_start, span.model_request_end, span.outcome_evaluation_start, span.outcome_evaluation_ongoing, and span.outcome_evaluation_end.

Event delta stream frames

A buffered event is a complete public Event object emitted after generation finishes and recorded in Session event history. It is the authoritative result. event_start and event_delta are stream-only SSE payloads used for incremental output. They are not public Event objects and do not appear in event list/history responses. Their JSON payloads have no top-level id or processed_at; the SSE id: field carries the ID of the event being streamed and can be used with Last-Event-ID.

Event start frame

An event_start frame identifies the public event whose incremental output has begun.
FieldTypeDescription
typestringAlways "event_start"
eventobjectStreamed event reference
The event object has these fields:
FieldTypeDescription
idstringEvent ID with the evt_ prefix. The SSE id:, related deltas, and buffered event use this same ID.
typestring"agent.message" or "agent.thinking"
An agent.message start is followed by text event_delta frames. An agent.thinking start is start-only: no delta follows, and the buffered agent.thinking event with the same ID marks the end of that thinking phase when one is emitted.
{
  "type": "event_start",
  "event": {
    "id": "evt_00jjujk9fbnr4wkj2gh8",
    "type": "agent.message"
  }
}

Event delta frame

An event_delta frame appends text to an incrementally streamed agent.message.
FieldTypeDescription
typestringAlways "event_delta"
event_idstringID from the matching event_start.event.id and SSE id: field
deltaobjectContent delta
The delta object has these fields:
FieldTypeDescription
typestringAlways "content_delta"
indexintegerZero-based index of the content block being updated
contentobjectText fragment with type: "text" and a text string
{
  "type": "event_delta",
  "event_id": "evt_00jjujk9fbnr4wkj2gh8",
  "delta": {
    "type": "content_delta",
    "index": 0,
    "content": {
      "type": "text",
      "text": "Hello"
    }
  }
}

Model request span events

span.model_request_start marks the beginning of one model request.
FieldTypeDescription
idstringEvent ID with the evt_ prefix
processed_atstringRFC 3339 timestamp
typestringAlways "span.model_request_start"
span.model_request_end marks completion of that model request and includes model_usage when credits are available for the call. model_usage.credits is floored to at most 2 decimal places.
FieldTypeDescription
idstringEvent ID with the evt_ prefix
is_errorbooleanWhether the model request ended with an error or cancellation
model_request_start_idstringID of the corresponding span.model_request_start event
model_usageobjectOptional usage for this model call. Omitted when credits are unavailable
processed_atstringRFC 3339 timestamp
typestringAlways "span.model_request_end"
model_usage contains only:
FieldTypeDescription
creditsnumberCredits consumed by this model call. The value may be 0 and is floored to at most 2 decimal places

Session Thread object

In managed-agent scenarios, each thread within a Session is represented by this structure.
FieldTypeDescription
idstringThread ID with the sthr_ prefix
typestringAlways "session_thread"
session_idstringOwning Session ID
parent_thread_idstring | nullParent thread ID. null for the coordinator thread
agentobjectAgent snapshot used by this thread. Same shape as the Session embedded agent, with the multiagent block additionally removed
statusstringThread lifecycle status: running, idle, rescheduling, or terminated
statsobject | nullThread statistics. Current implementation returns null
archived_atstring | nullArchive time, or null when not archived
created_atstringCreation time
updated_atstringLast update time
Thread responses no longer include legacy fields such as agent_id, agent_version, name, role, stop_reason, created_by_tool_use_id, or usage.