The 60 events SOAT emits, grouped by the resource_type each carries. Every name is <resource type, plural>.<verb>. A webhook subscribes to them by exact name, to one resource type's with <plural>.*, or to all of them with *.
Each event arrives as the envelope described in Webhooks → Event Payload: the name below is the event field and the X-Soat-Event header, the heading above each table is the resource_type field, and data carries the resource in the same shape the REST API returns it.
An orchestration emit_event node also emits events, under whatever name the template author chose. Those are not listed here — they are yours, not SOAT's — and they carry resource_type: orchestration_run.
agent
| Event | Description |
|---|
agents.created | An agent was created. |
agents.updated | An agent was updated. |
agents.deleted | An agent was deleted. |
approval
| Event | Description |
|---|
approvals.created | An approval request was raised and is pending. |
approvals.approved | A pending approval was approved. |
approvals.rejected | A pending approval was rejected. |
approvals.expired | A pending approval passed its deadline unanswered. |
audit
| Event | Description |
|---|
audit_entries.created | An audit entry was recorded. |
conversation
| Event | Description |
|---|
conversations.created | A conversation was created. |
conversations.updated | A conversation was updated. |
conversations.deleted | A conversation was deleted. |
conversation_message
| Event | Description |
|---|
conversation_messages.created | A message was added to a conversation; the payload carries the message plus its conversation_id. |
conversation_messages.generated | An assistant message was generated in a conversation; the payload carries the message plus conversation_id, generation_id and trace_id. |
conversation_messages.deleted | A message was removed from a conversation; the payload carries the message as it stood plus its conversation_id. |
decision
| Event | Description |
|---|
decisions.completed | A decision settled with its answers; the payload carries the decision, answers included. |
decisions.failed | A decision settled without answers; the payload carries the decision and its error. |
document
| Event | Description |
|---|
documents.created | A document was created. |
documents.updated | A document was updated. |
documents.deleted | A document was deleted. |
documents.withdrawn | A document was withdrawn: it leaves listings and knowledge search, its chunks are dropped from the index, and the withdrawal is recorded as a version. It stays readable by id and can be restored. |
documents.restored | A withdrawn document was restored from an earlier version: its content is re-chunked and re-indexed, and it returns to listings and knowledge search. |
documents.ingested | A document finished ingestion and is indexed (status=ready); the payload carries the document plus its final chunk_count. |
documents.ingest_failed | A document ingestion settled in failure (status=failed); the payload carries the document plus the error reason (e.g. FILE_PARSE_FAILED, INGESTION_TIMEOUT). |
eval_run
| Event | Description |
|---|
eval_runs.completed | An eval run reached a terminal status with its items scored; the payload is the run, carrying the pass/fail verdict consumed by eval-gated promotion. |
eval_runs.failed | An eval run could not be executed to completion (infrastructure failure). |
exception
| Event | Description |
|---|
exceptions.created | An exception was filed. |
file
| Event | Description |
|---|
files.created | A file was uploaded. |
files.updated | A file was updated. |
files.deleted | A file was deleted. |
generation
| Event | Description |
|---|
generations.requires_action | A generation paused for a client-side tool result; the payload carries the generation plus the pending required_action. |
generations.completed | A generation completed; a turn run in a session carries its session_id. |
generations.failed | A generation failed. |
generations.content_purged | A generation's content was redacted, leaving its auditable skeleton. |
generations.chain_limit | A continuation chain reached its generation budget and was refused; the payload carries the root generation plus chain_size, limit, limit_source, refused_agent_id and refused_initiator_generation_id. |
guardrail
| Event | Description |
|---|
guardrails.tripwire | A guardrail tripwire aborted a tool call; the payload carries the guardrail plus guardrail_version and the aborted call (tool_id, tool_name, action, agent_id, generation_id, orchestration_run_id, node_id). |
memory
| Event | Description |
|---|
memories.retracted | A memory was retracted: the fact stopped holding with nothing replacing it, so it leaves knowledge search, dedup and the default listing. It stays readable by id, with its assertions. |
orchestration_run
| Event | Description |
|---|
orchestration_runs.started | An orchestration run started. |
orchestration_runs.awaiting_input | An orchestration run paused waiting for input. |
orchestration_runs.completed | An orchestration run completed. |
orchestration_runs.failed | An orchestration run failed. |
project
| Event | Description |
|---|
projects.paused | A project was paused: nothing new starts in it, and the runs and tasks it had in motion park at their next checkpoint. |
projects.resumed | A project was resumed: the runs and tasks its pause held are handed back, and its schedules fire again. |
quota
| Event | Description |
|---|
quotas.exceeded | A quota limit was exceeded; the payload carries the quota plus the breached window_key and the observed_value. |
session
| Event | Description |
|---|
sessions.created | A session was created. |
sessions.updated | A session was updated. |
sessions.deleted | A session was deleted. |
sessions.generation_started | A generation started in a session; the payload is the session, before the generation is created. The turn settles as a generations.* event. |
task
| Event | Description |
|---|
tasks.created | A task was created. |
tasks.transitioned | A task moved to a new state; the payload carries the task plus transition and from_state. |
tasks.migrated | A task moved onto a newer workflow version; the payload carries the task plus from_state and from_workflow_version. |
tasks.closed | A task reached a terminal state. |
tasks.stalled | A task exceeded its stall threshold without progress. |
tasks.paused | A task's automation was paused by an operator. |
tasks.resumed | A task's automation was resumed. |
tasks.approval_failed | A task's approved transition could no longer apply; the payload carries the task plus transition and error_code. |
tasks.automation_retrying | A task's automation is being retried; the payload carries the task plus attempt, max_attempts, error, generation_id and orchestration_run_id. |
tasks.automation_rejected | A task's automation rejected the task; the payload carries the task plus result, transition and error_code. |
tasks.automation_unrouted | A task matched no automation route; the payload carries the task plus result. |
trace
| Event | Description |
|---|
traces.content_purged | A trace's content was redacted, leaving its auditable skeleton. |
usage_threshold
| Event | Description |
|---|
usage_thresholds.crossed | A usage threshold was crossed. |