Envelope
Every delivery shares the same outer shape. The event-specific payload lives underdata; everything else identifies which agent, fleet, and thread the event belongs to.
Agent
agent.created
Fired when a new agent is provisioned in the fleet.
agent.updated
Fired when an agent’s configuration or metadata changes. trigger distinguishes the two so you can decide whether to invalidate cached config.
agent.deleted
Fired when an agent is deleted. The agent record is no longer retrievable, so only the ID is included.
Thread
Thread status values are"idle", "running", "awaiting", or "closed".
thread.created
Fired when a new thread starts on an agent. The threadId is on the envelope.
thread.status.changed
Fired on every thread status transition. Use this when you want to track every state change; use thread.completed and thread.failed if you only care about runs that finished.
thread.completed
Fired when a running or awaiting thread settles back to idle with a result. A thread can complete multiple times over its lifetime — once per run that finishes successfully. Always paired with a thread.status.changed event for the same transition.
thread.failed
Fired when a running or awaiting thread settles back to idle with an error. Like thread.completed, this can fire more than once over a thread’s lifetime.
Turn
A turn is one user-message-and-response exchange inside a thread.turn.created
Fired when a new turn starts. seq orders turns within a thread.
turn.completed
Fired when a turn finishes successfully.
turn.failed
Fired when a turn ends in failure. Same shape as turn.completed with a "failed" status and a populated error.
Message
message.created
Fired when a new user or assistant message is appended to a thread. Tool messages and intermediate assistant content do not fire this event — use thread streaming for the full transcript.
The message body is not included in this payload. You only get the role and metadata; to read what was actually said, fetch the message via the API or subscribe to thread streaming.
Approval
approval.requested
Fired when a tool call requires human approval before running. Surface the approval to a human and resolve it via the API; the resolution drives an approval.resolved event.
approval.resolved
Fired when an approval reaches a terminal state — approved by a human, denied, timed out, or cancelled because the thread moved on.
approval.granted
Fired when a user grants standing approval for a tool, scoped to either a single thread or the whole agent. Subsequent calls to that tool within the scope skip the approval step.
Schedule
schedule.created
Fired when an agent creates a schedule via the agent.schedule.* namespace.
schedule.deleted
Fired when a schedule is removed.
schedule.triggered
Fired when a schedule fires and starts a thread. The new thread’s ID is in the payload; the envelope’s threadId also points at it.
Connection
connection.attached
Fired when a connection is attached to an agent. Pair this with connection.detached to keep your own view of which integrations the agent currently has.
connection.detached
Fired when a connection is removed from an agent.
Test
webhook.test
Synthetic event fired only by POST /fleets/{fleetId}/webhooks/{id}/test. The payload data is always {}. This event is not subscribable — you cannot include "webhook.test" in a subscription’s events array on create or update — and it does not appear in ALL_WEBHOOK_EVENT_TYPES. Treat it as a probe for verifying the receive path; ignore unknown event types in your handler so a future test event does not fail closed.