Skip to main content
This page lists every webhook event Cerca emits, with the payload shape and a representative JSON example. For the delivery model, signing, and retry semantics, see Webhooks. For the receive path, see Receiving webhooks.

Envelope

Every delivery shares the same outer shape. The event-specific payload lives under data; 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.