Webhooks

A webhook endpoint receives a POST when something happens on your organization. It is the way to learn that a session went idle without holding a stream open.

Event types

TypeWhen
agent.createdAn agent was created.
session.status_run_startedA turn started.
session.status_idledThe session went idle: its turn ended, or it waits on a tool's result.
session.status_terminatedThe session was archived, or ended on an error it cannot recover from.
session.updatedAn update set a new title, new metadata or a new agent. Clearing one sends none.
session.deletedThe session was deleted.
vault.createdA vault was created.
vault.archivedA vault was archived.
vault.deletedA vault was deleted.
vault_credential.createdA credential was created.
vault_credential.archivedA credential was archived, alone or with its vault.
vault_credential.deletedA credential was deleted.
vault_credential.refresh_failedThe token endpoint refused an mcp_oauth credential's refresh.

A session's webhook names are not its stream's: the stream's session.status_running and session.status_idle arrive as session.status_run_started and session.status_idled. Creating a session sends none of its own; its initial events start a turn, as a send does.

An endpoint with no type list receives all of them. Delivery is best effort. The change has already committed when the delivery starts, and coreloop backfills nothing.

The body

The body carries ids, not the resource. Read the resource from the API when you need its contents. A vault_credential event also carries its vault_id.

JSON
{
  "type": "event",
  "id": "whe_...",
  "created_at": "2026-09-22T11:04:07.913Z",
  "data": {
    "type": "session.status_idled",
    "id": "sesn_...",
    "organization_id": "org_...",
    "workspace_id": null
  }
}

Verifying

coreloop signs deliveries to the Standard Webhooks specification. Each request carries webhook-id, webhook-timestamp and webhook-signature. The secret shows once, when you register the endpoint. Verify with any Standard Webhooks library.

Registering an endpoint

An endpoint belongs to the organization, not to this API. The route that creates one takes a signed-in owner.

Soon: a webhooks page in the dashboard.