<entity>.<action>.
Envelope
All events share the same outer envelope:text field is a one-line summary of the event built from data. It’s intended for two use cases:
- Slack incoming webhooks — Slack expects
{ "text": "..." }at the top level, so registering a Slack webhook URL as your receiver renders each event as a chat message with no relay needed. - Logs / CLI tools — gives an at-a-glance description without per-type formatting.
data; treat text as presentation only.
The headers are described in Overview → Receive events and signed per Signature verification.
Tasks
| Event | Fired when |
|---|---|
task.completed | A task execution finishes successfully. Carries artifacts and a recording link if a session was used. |
task.failed | A task execution fails (any reason). The data.error.type field tells you whether it was automation_failure, invalid_credentials, timeout, agent_error, or system_error. |
task.cancelled | A task execution was cancelled (e.g. via the API or dashboard). |
task.healed | Anchor’s self-heal produced a new task version after a failure. The notification points at the new healed_task_version_id so your CI/ops can review or auto-promote the fix. |
- completed
- failed
- cancelled
- healed
completed, failed, and cancelled all include the same rich-output fields:artifacts[]— task artifacts and per-session downloads, each with aname,url, and (when known)sizeandcontent_type. Empty when nothing was captured.recording_url— short-lived presigned link to the primary session recording. Often missing ontask.failedbecause the recording uploads asynchronously; subscribe tosession.recording.readyif you need a stable signal that the recording is ready (then fetch it via the Recordings API).session_dashboard_url— direct link into the Anchor dashboard for the underlying session.
Sessions
| Event | Fired when |
|---|---|
session.completed | A browser session finished cleanly. Includes duration and resource-usage breakdown (proxy bytes, network bytes, steps, screenshots, visited domains). |
session.failed | A browser session was terminated abnormally — pod gone, browser unreachable, or any other non-clean termination. |
session.recording.ready | The session recording finished uploading. Carries the recording duration, size, and a dashboard URL — fetch the actual recording via the Recordings API to get a fresh presigned link. |
intervention.requested | The agent paused and is waiting for a human (CAPTCHA, MFA, custom confirm). Includes a live_view_url for one-click takeover. |
intervention.resolved | The intervention was responded to (by your code or a teammate). |
- session.completed
- session.failed
- session.recording.ready
- intervention.requested
- intervention.resolved
Batches
| Event | Fired when |
|---|---|
batch.completed | All sessions in a batch reached a terminal state and at least one succeeded. |
batch.failed | Every session in the batch failed (or the batch produced zero sessions). |
type and status field differ.
Identity
| Event | Fired when |
|---|---|
identity.authenticated | An identity successfully authenticated and is now usable for subsequent runs. Use this if you need positive confirmation that a credential rotation or first-time login worked. |
identity.authentication_failed | An identity-based login attempt failed. The failure_type field distinguishes invalid_credentials (the password was wrong) from automation_failure. |
- authenticated
- authentication_failed

