Skip to main content
Event names follow <entity>.<action>.

Envelope

All events share the same outer envelope:
{
  "id": "evt_<unique>",
  "type": "<event_type>",
  "created": "<ISO 8601 timestamp>",
  "project_id": "<your project id>",
  "text": "<one-line human-readable summary>",
  "data": { "...event-specific fields..." }
}
The 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.
The structured data you should integrate against still lives in data; treat text as presentation only. The headers are described in Overview → Receive events and signed per Signature verification.

Tasks

EventFired when
task.completedA task execution finishes successfully. Carries artifacts and a recording link if a session was used.
task.failedA 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.cancelledA task execution was cancelled (e.g. via the API or dashboard).
task.healedAnchor’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, and cancelled all include the same rich-output fields:
  • artifacts[] — task artifacts and per-session downloads, each with a name, url, and (when known) size and content_type. Empty when nothing was captured.
  • recording_url — short-lived presigned link to the primary session recording. Often missing on task.failed because the recording uploads asynchronously; subscribe to session.recording.ready if 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.
{
  "type": "task.completed",
  "data": {
    "task_id": "tsk_4f8w9n2b-3d5a-45e7-89ab-cdef0123456f",
    "task_version_id": "tv_demo_v3",
    "execution_id": "exr_8d2c1fda-7b6e-4a3d-9c1f-0e2b3a4c5d6e",
    "session_id": "ses_8d2c1fda",
    "execution_mode": "deterministic",
    "duration_ms": 4218,
    "cost": { "amount": 0.012, "currency": "USD" },
    "output": { "value": { "order_id": "8421", "status": "confirmed" } },
    "artifacts": [
      {
        "name": "order-confirmation.pdf",
        "url": "https://api.anchorbrowser.io/v1/executions/exr_8d2c1fda/artifacts/art_1/fetch",
        "size": 38421,
        "content_type": "application/pdf"
      }
    ],
    "recording_url": "https://anchor-recordings.s3.amazonaws.com/sessions/ses_8d2c1fda/videos/recording.mp4?...",
    "session_dashboard_url": "https://app.anchorbrowser.io/sessions/ses_8d2c1fda"
  }
}

Sessions

EventFired when
session.completedA browser session finished cleanly. Includes duration and resource-usage breakdown (proxy bytes, network bytes, steps, screenshots, visited domains).
session.failedA browser session was terminated abnormally — pod gone, browser unreachable, or any other non-clean termination.
session.recording.readyThe 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.requestedThe agent paused and is waiting for a human (CAPTCHA, MFA, custom confirm). Includes a live_view_url for one-click takeover.
intervention.resolvedThe intervention was responded to (by your code or a teammate).
{
  "type": "session.completed",
  "data": {
    "session_id": "ses_8d2c1fda",
    "duration_ms": 27540,
    "proxy_bytes": 2581234,
    "network_bytes_total": 4891204,
    "steps": 12,
    "domains": ["example.com", "api.example.com"],
    "session_dashboard_url": "https://app.anchorbrowser.io/sessions/ses_8d2c1fda"
  }
}

Batches

EventFired when
batch.completedAll sessions in a batch reached a terminal state and at least one succeeded.
batch.failedEvery session in the batch failed (or the batch produced zero sessions).
Both events carry the same payload shape — only the type and status field differ.
{
  "type": "batch.completed",
  "data": {
    "batch_id": "bat_92ab7de1",
    "total_requests": 25,
    "completed_requests": 25,
    "failed_requests": 0,
    "status": "completed"
  }
}
{
  "type": "batch.failed",
  "data": {
    "batch_id": "bat_92ab7de1",
    "total_requests": 25,
    "completed_requests": 18,
    "failed_requests": 7,
    "status": "failed"
  }
}

Identity

EventFired when
identity.authenticatedAn 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_failedAn identity-based login attempt failed. The failure_type field distinguishes invalid_credentials (the password was wrong) from automation_failure.
{
  "type": "identity.authenticated",
  "data": {
    "identity_id": "idn_acme_orders",
    "application_id": "app_acme",
    "session_id": "ses_8d2c1fda",
    "execution_id": "exr_8d2c1fda"
  }
}