OpenSequence
DocsAPI referenceSDKs and CLIReference

Webhook events

The event catalogue: when each event fires and what its payload carries.

Edit on GitHub
This page is generated from packages/engine/src/domain/shared/events.ts by pnpm generate. Do not edit it by hand; change the source and regenerate.

GET /v1/schema/events returns the same list. Every delivery body has the shape below; the fields in the table are inside data. Subscribe to "*" or to a list of types when you create an endpoint. See Receiving webhooks.

{
  "id": "evt_01J9…",
  "type": "enrollment.exited",
  "project": "prj_01J9…",
  "enrollment": "enr_01J9…",
  "occurred_at": "2026-10-13T09:00:00.000Z",
  "data": { "enrollment": { "id": "enr_01J9…", "seq": 7, "...": "..." }, "exit_reason": "replied", "signal": "sig_01J9…" }
}
EventWhenPayload (data)
enrollment.createdafter a successful enroll, one per contactenrollment (id, sequence, version, contact, sender, status, mode, current_node_id, touch_count, enrolled_at, seq)
enrollment.exitedan exit by rule (reply, meeting, opt-out, bounce, suppression) or by APIenrollment, exit_reason (replied, meeting_booked, opt_out, bounced, suppressed, manual, deleted), signal (the signal id, when one caused it), label (manual exits)
enrollment.completedan end node, an unwired transition, or a task completed with no next stepenrollment
enrollment.pauseda manual pause, an out-of-office reply, or a step that failed with no failed transitionenrollment, pause_reason (manual, ooo, step_failed), paused_until
enrollment.resumeda manual resume or a pause whose paused_until passedenrollment, pause_reason (the reason it had), paused_until: null
run.donean outreach step was sentrun (id, node_id, node_type, channel, action, status, touch_number, provider, provider_ref, branch, enrollment), enrollment
run.skippeda gate refused a step for good (no consent, no phone, suppressed, no channel, country not allowed, no time zone)run, reason
run.faileda step ran out of retries or was stuckrun, error
run.needs_reviewthe outcome of a send is unknown (an SMS that may or may not have left)run, error
task.createda task node created a task for the sendertask (id, kind, title, body, link, due_at, expires_at, status, outcome, dialer, enrollment, contact, sender)
task.expireda task reached expires_at (the step takes no_answer) or was cancelled by an exittask (the id only when expired by the timer; the full task when cancelled by an exit)
signal.receivedany signal was processed: reply, bounce, complaint, opt-out, meeting, call, task completion, client eventsignal (id, kind, channel, source, occurred_at, attribution, attributed_run), contact (id, external_id, email, phone, first_name, last_name)
sender.channel_statusa channel changed status (credentials_needed, restricted, back to active)sender, channel, status
endpoint.disabledan endpoint failed every delivery for three days, or its secret can no longer be decryptedendpoint (id, url, event_types, status, disabled_reason, disabled_at), reason