Sessions Commands
See Sessions module docs for permissions and data model.
soat create-session
Create a session
- Method:
POST - Path:
/api/v1/sessions
Usage
soat create-session --agent-id <string>
Options
--agent-id
Agent this session belongs to
- Source:
body - Required: yes
- Type:
string - Example:
agent_V1StGXR8Z5jdHi6B
--name
Optional session name
- Source:
body - Required: no
- Type:
string - Example:
Support chat
--actor-id
Optional public ID of an existing actor to use as the user actor. Actors are created separately (POST /actors); this field only links one. Omit it and the session has no end user, so its generations match no actor-scoped quota.
- Source:
body - Required: no
- Type:
string - Example:
actor_V1StGXR8Z5jdHi6B
--auto-generate
When true, automatically triggers generation after each user message.
- Source:
body - Required: no
- Type:
boolean - Default:
false
--tool-context
Key-value pairs forwarded as X-Soat-Context-<key> headers on every http, mcp and builtin tool call in this session. The header name is the deployment's configured context prefix (X-Soat-Context- by default) plus the key verbatim — no character is re-cased. Keys are never case-converted — they round-trip exactly as sent. A key that is not a valid HTTP header name, or two keys that map to the same header, are rejected with 400 INVALID_TOOL_CONTEXT_KEY.
- Source:
body - Required: no
- Type:
object<string, string>
--inactivity-ttl-seconds
Number of seconds of inactivity after which the session expires. 0 means the session never expires.
- Source:
body - Required: no
- Type:
integer - Default:
0 - Example:
300
--message-delay-seconds
Number of seconds to wait after the last user message before sending to the LLM. Acts as a debounce: each new message resets the timer. null or absent means no delay (immediate processing).
- Source:
body - Required: no
- Type:
integer \| null - Default:
null - Example:
3
soat list-sessions
List sessions
- Method:
GET - Path:
/api/v1/sessions
Usage
soat list-sessions
Options
--agent-id
Filter by agent public ID
- Source:
query - Required: no
- Type:
string - Example:
agent_V1StGXR8Z5jdHi6B
--actor-id
Filter by actor public ID
- Source:
query - Required: no
- Type:
string
--status
Filter by session status (open, closed, or expired)
- Source:
query - Required: no
- Type:
enum("open", "closed", "expired")
--limit
—
- Source:
query - Required: no
- Type:
integer - Default:
50
--offset
—
- Source:
query - Required: no
- Type:
integer - Default:
0
soat get-session
Get a session
- Method:
GET - Path:
/api/v1/sessions/{session_id}
Usage
soat get-session
Options
This command has no options.
soat update-session
Update a session
- Method:
PATCH - Path:
/api/v1/sessions/{session_id}
Usage
soat update-session
Options
--name
Session name (set to null to clear)
- Source:
body - Required: no
- Type:
string \| null
--status
Session status
- Source:
body - Required: no
- Type:
enum("open", "closed", "expired")
--auto-generate
Enable or disable automatic generation after user messages.
- Source:
body - Required: no
- Type:
boolean
--tool-context
Key-value pairs forwarded as X-Soat-Context-<key> headers on every http, mcp and builtin tool call in this session. The header name is the deployment's configured context prefix (X-Soat-Context- by default) plus the key verbatim — no character is re-cased. Keys are never case-converted — they round-trip exactly as sent. A key that is not a valid HTTP header name, or two keys that map to the same header, are rejected with 400 INVALID_TOOL_CONTEXT_KEY.
- Source:
body - Required: no
- Type:
object<string, string>
--inactivity-ttl-seconds
Number of seconds of inactivity after which the session expires. 0 means the session never expires. Updates the stored TTL; the inactivity clock continues from the last activity timestamp.
- Source:
body - Required: no
- Type:
integer - Example:
300
--message-delay-seconds
Number of seconds to wait after the last user message before sending to the LLM. Acts as a debounce: each new message resets the timer. Set to null to disable the delay.
- Source:
body - Required: no
- Type:
integer \| null - Example:
3
soat delete-session
Delete a session
- Method:
DELETE - Path:
/api/v1/sessions/{session_id}
Usage
soat delete-session
Options
This command has no options.
soat add-session-message
Add a user message
- Method:
POST - Path:
/api/v1/sessions/{session_id}/messages
Usage
soat add-session-message
Options
This command has no options.
soat generate-session-response
Trigger agent generation
- Method:
POST - Path:
/api/v1/sessions/{session_id}/generate
Usage
soat generate-session-response
Options
--wait
When omitted or false (default), generation runs in the background and 202 Accepted is returned immediately. Pass true to block until the generation settles and receive the result.
- Source:
query - Required: no
- Type:
boolean - Default:
false
--model
Optional model override
- Source:
body - Required: no
- Type:
string - Example:
gpt-4o
--tool-context
Key-value pairs forwarded as X-Soat-Context-<key> headers on every http, mcp and builtin tool call in this generation. The header name is the deployment's configured context prefix (X-Soat-Context- by default) plus the key verbatim — no character is re-cased. Keys are never case-converted — they round-trip exactly as sent. An invalid or colliding key is rejected with 400 INVALID_TOOL_CONTEXT_KEY.
- Source:
body - Required: no
- Type:
object<string, string>
soat submit-session-tool-outputs
Submit tool outputs
- Method:
POST - Path:
/api/v1/sessions/{session_id}/tool-outputs
Usage
soat submit-session-tool-outputs --generation-id <string> --tool-outputs <array<object>>
Options
--generation-id
The generation ID from the requires_action response
- Source:
body - Required: yes
- Type:
string
--tool-outputs
—
- Source:
body - Required: yes
- Type:
array<object>
soat fork-session
Fork a session
- Method:
POST - Path:
/api/v1/sessions/{session_id}/fork
Usage
soat fork-session
Options
--fork-at-position
The parent conversation position to branch after. Messages at positions 0..N are carried into the fork. Omit it to branch at the tip (the whole history).
- Source:
body - Required: no
- Type:
integer - Example:
7
--agent-id
Agent the fork runs against. Defaults to the parent session's agent; overriding it is the point of forking — same context, a different agent or agent version. Must belong to the same project as the session being forked.
- Source:
body - Required: no
- Type:
string - Example:
agent_V1StGXR8Z5jdHi6B
--name
Optional name for the forked session
- Source:
body - Required: no
- Type:
string - Example:
retry with stricter system prompt
--tags
Optional tags for the forked session
- Source:
body - Required: no
- Type:
object<string, string>
--tool-context
Overrides the parent's tool_context on the fork. Omit it and the fork inherits the parent's, so the branch is faithful to the run it came from.
- Source:
body - Required: no
- Type:
object<string, string>
soat list-session-forks
List a session's forks
- Method:
GET - Path:
/api/v1/sessions/{session_id}/forks
Usage
soat list-session-forks
Options
--limit
—
- Source:
query - Required: no
- Type:
integer - Default:
50
--offset
—
- Source:
query - Required: no
- Type:
integer - Default:
0
soat get-session-tags
Get session tags
- Method:
GET - Path:
/api/v1/sessions/{session_id}/tags
Usage
soat get-session-tags
Options
This command has no options.
soat replace-session-tags
Replace session tags
- Method:
PUT - Path:
/api/v1/sessions/{session_id}/tags
Usage
soat replace-session-tags
Options
This command has no options.
soat merge-session-tags
Merge session tags
- Method:
PATCH - Path:
/api/v1/sessions/{session_id}/tags
Usage
soat merge-session-tags
Options
This command has no options.