Webhook Events Reference
Payload shape for every event the platform emits. The names and samples on this page mirror what the dispatcher actually sends — generated fromWEBHOOK_EVENT_TYPES in packages/shared/src/constants.ts
and the dispatchTenantWebhook / buildWebhookJobs call sites.
For the full catalog with one-liner descriptions, see
Webhook Events.
Event Envelope
Every webhook delivery wraps the event in a standard envelope:| Field | Type | Description |
|---|---|---|
id | string | Unique event ID (idempotency key) |
type | string | Event type identifier (one of the values in this reference) |
created_at | string | ISO 8601 timestamp |
data | object | Event-specific payload |
truncated | boolean (optional) | true only when the original data exceeded 256 KB and was replaced with a pointer-style envelope. Subscribers fetch the full resource via the API. |
truncated: true, data carries _truncated: true,
_original_bytes, and a small set of identifier fields (id,
message_id, conversation_id, contact_id, campaign_id,
channel) so consumers can locate the resource.
Catalog Index
Every webhook event Orbit emits — 185 in total — grouped by surface. Each row links to its long-form payload section below; combined headings (e.g. campaign create / update / delete share one section) point to the first member.Message Events
| Event | Description |
|---|---|
message.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
message.sent | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
message.delivered | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
message.failed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
message.read | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
message.received | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
message.recipient_deactivated | Carrier number deactivation sweep (R16FIX 2026-05-30) — fires once per deactivated MSISDN the nightly carrier-feed sweep flips to DNC. |
message.replied | MESSAGE_REPLIED — fires when an INBOUND message is received in response to an OUTBOUND message (i.e. there is at least one prior outbound message in the same conversation). |
Contact Events
| Event | Description |
|---|---|
contact.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
contact.updated | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
contact.deleted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
contact.trait_changed | Computed-trait value transition for a single contact (DECISION — CDPAAS_REAL_TIME_TRAIT_RECOMPUTE_2026_05_28). |
contact.bulk_imported | Fired once per bulk CSV import after all rows are processed. |
contact.merged | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
contact.opted_out | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
contact.opted_in | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
contact.recertification_due | Reassigned Number Database (RMD) annual recertification due. |
contact.segment_changed | Predictive-scoring events (migration 077). |
Campaign Events
| Event | Description |
|---|---|
campaign.started | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
campaign.completed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
campaign.paused | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
campaign.resumed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
campaign.drip_step.sent | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
campaign.drip_step.completed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
campaign.drip.completed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
campaign.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
campaign.updated | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
campaign.deleted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Voice Events
| Event | Description |
|---|---|
call.initiated | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
call.answered | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
call.completed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
call.failed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
call.transferred | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
call.dtmf_sent | Mid-call DTMF inject (B-237). |
call.recording.paused | Mid-call recording pause (B-242). |
call.recording.resumed | Mid-call recording resume (B-242). |
call.hit_voicemail | Outbound call hit a voicemail / fax (Telnyx AMD result = machine|fax). |
call.ringing | Inbound INVITE seen at the SIP edge but call not yet answered. |
conference.created | Conference lifecycle events (audit #BUG-R65). |
conference.participant_joined | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
conference.participant_left | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
conference.ended | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
recording.started | Recording lifecycle events (audit #BUG-R65). |
recording.completed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
recording.failed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
recording.qc_failed | Post-finalize QC failure (RTC-PaaS competitor-parity gap, 2026-05-29). |
voicemail.received | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
voicemail.transcript_updated | Late-arriving transcript: fires when a voicemail’s transcript was NULL at receipt (Deepgram inline failure) and a subsequent retry recovered it. |
call.transcript_ready | Telephony-aware CDP — CDP-016 parity wedge (2026-05-29). |
call.recording.ready | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
call.transcription.ready | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
call.synthesis.ready | AI summary / action-items / sentiment extracted from the transcript (opt-in). |
call.synthesized | Phase 4.4 — Post-call synthesis pipeline (scheduler-driven). |
recording.retention_deleted | Fired ahead of a retention-driven GCS purge so tenants can mirror the recording/attachment to their own archive before it is deleted. |
recording.chapters.ready | RTC-PaaS auto-chaptering (2026-05-28). |
voice_eval.run_started | Voice eval regression suite (migration 282, 2026-05-22). |
voice_eval.run_completed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
voice_eval.regression_detected | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Agent Events
| Event | Description |
|---|---|
agent.conversation.started | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.conversation.ended | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.updated | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.deleted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.deployed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.handoff.requested | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.handoff_occurred | Phase 4.2 — Fired by agent-runtime the moment one agent delegates a conversation to another specialist agent via the enhanced transfer_to_agent tool. |
agent.response | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.calendar_event.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.dnc.marked | AIaaS-P0-BUG fix (2026-05-30): fired by POST /agents/dnc when an AI voice / text agent invokes the mark_dnc MCP tool and the platform persists the suppression to suppression_list (+ dnc_list mirror for voice/S… |
agent.handed_off | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
agent.state.changed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Flow Events
| Event | Description |
|---|---|
flow.execution.started | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
flow.execution.completed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
flow.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
flow.updated | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
flow.deleted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
flow.published | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
flow.executed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
flow.execution.failed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Verification Events
| Event | Description |
|---|---|
verification.sent | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
verification.approved | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
verification.failed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
verification.checked | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
verification.fallback_triggered | Fired by the scheduler-verify-fallback tick each time the async fallback engine advances to a new channel. |
verification.fallback_exhausted | Fired when the async fallback engine has tried every channel in the fallbackConfig.channels array without obtaining a verified status. |
Number / Porting Events
| Event | Description |
|---|---|
number.purchased | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
number.released | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
number.ported | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
number.inventory.low | Low DID inventory alert (NaaS gap, anchor: PROTOCOL — NAAS_TN_LOW_STOCK_ALERT_2026_05_31). |
number.updated | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
porting.request.cancelled | Number porting customer-cancellation event. |
porting.request.manual_review_required | Port-IN fell back into manual-review mode (GAP2_NaaS_115, 2026-05-29). |
porting.request.loa_signed | Port-IN LOA signed in-platform (cpaasparity2-porting-loa-workflow, 2026-05-29). |
number.port_out.requested | Number port-OUT lifecycle events (NaaS-005 capability-gap fix, 2026-05-29). |
number.port_out.cancelled | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Conversation Events
| Event | Description |
|---|---|
conversation.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
conversation.disposed | Fired by the auto-disposition service when a conversation is automatically closed/resolved by an AI or rule-based disposition engine. |
conversation.scored | Fired by the QM-scoring service when a conversation receives a quality-management score. |
conversation.csat_detractor | CSPaaS LOW_CSAT_AUTOMATION_HOOK_2026_05_30 — fired when a customer-facing CSAT (1..5, < 3) or NPS (0..10, 0..6) submission lands and qualifies as a detractor. |
conversation.deflected | CSPaaS Intercom Fin / Zendesk parity gap (2026-05-30) — CRM/CDP needs to distinguish AI-resolved volume from human-resolved volume. |
conversation.started | Conversation lifecycle — fired by the inbox/handoff pipeline. |
conversation.closed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
List / Segment Events
| Event | Description |
|---|---|
list.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
list.deleted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
segment.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
segment.deleted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Webhook Endpoint Events
| Event | Description |
|---|---|
webhook_endpoint.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
webhook_endpoint.updated | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
webhook_endpoint.deleted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Billing Events
| Event | Description |
|---|---|
subscription.updated | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
balance.topped_up | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
credits.purchased | Use BALANCE_TOPPED_UP instead Deprecated. |
balance.low | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
credits.low | Use BALANCE_LOW instead Deprecated. |
invoice.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
payment.failed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Channel Failover Events
| Event | Description |
|---|---|
channel.failover | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Push Events
| Event | Description |
|---|---|
push.delivered | Push notification SDK ack events. |
push.opened | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Number Masking (Proxy) Events
| Event | Description |
|---|---|
proxy.session.created | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
proxy.session.closed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
proxy.message.forwarded | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
WhatsApp Events
| Event | Description |
|---|---|
whatsapp.account.update | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.account.banned | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.account.restricted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.phone.quality_update | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.phone.name_update | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.capability.update | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.security.alert | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.flow.status_change | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.template.approved | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.template.rejected | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.template.quality_update | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.template.category_update | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.template.components_update | Meta auto-edits a template’s components for compliance (e.g. inserts the standard opt-out hint into a MARKETING body). |
whatsapp.quality.changed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.call.received | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.call.connected | WhatsApp Business Calling lifecycle events (Phase 2 — 2026-05-09). |
whatsapp.call.accepted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.call.terminated | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.call.permission_granted | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.call.permission_revoked | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
whatsapp.account.alert | Meta-issued operational alert about the WABA (e.g. policy violation, pricing change effective date, payment method failed). |
whatsapp.account.review_update | WABA went through a Meta-side review that updated its compliance status (e.g. moved to RESTRICTED / FLAGGED). |
whatsapp.business.status_update | Business profile status changed at Meta (verification badge, official business account flag, business status). |
whatsapp.user.preferences | User-level marketing preference signal. |
whatsapp.data.export_request | GDPR Article 15 (data subject access request) — user invoked “Request my data” inside the conversation. |
whatsapp.data.delete_request | GDPR Article 17 (right to erasure) — user invoked “Delete my data”. |
whatsapp.account.settings_update | WABA-level settings changed (commerce/profile/etc.). |
whatsapp.automatic_events | Meta’s auto-detected business events (cart abandoned, etc.). |
whatsapp.group.lifecycle_update | WA Group lifecycle (created/deleted). |
whatsapp.group.participants_update | WA Group participants joined/left. |
whatsapp.group.settings_update | WA Group renamed/description changed. |
whatsapp.group.status_update | WA Group activated/archived. |
whatsapp.history | Initial-connection backfill of historical messages. |
whatsapp.partner_solutions | Partner integration events. |
whatsapp.payment_configuration_update | Payment setup state changed (WA Pay). |
whatsapp.smb.app_state_sync | SMB app state sync events. |
whatsapp.smb.message_echoes | Echoes of messages sent from the SMB app (hybrid setups). |
whatsapp.template.correct_category_detection | Meta detected the template’s category was wrong vs. its actual intent. |
whatsapp.tracking_events | Per-message tracking events (link clicks, etc.). |
Supervisor Events
| Event | Description |
|---|---|
supervisor.takeover_requested | Fired when a supervisor initiates a warm-handoff takeover of a live call. |
supervisor.takeover_failed | Fired when a supervisor takeover attempt fails (e.g. Jambonz REST error during the leg-swap). |
supervisor.takeover_completed | Fired when the supervisor successfully takes over the call and becomes the active party. |
supervisor.takeover_cancelled | Fired when a takeover is cancelled (call ended before handoff completed, or supervisor explicitly aborted). |
SIP Trunk Events
| Event | Description |
|---|---|
sip_trunk.status_changed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
CDP Events
| Event | Description |
|---|---|
cdp.event.ingested | CDP inbound — fired after a Segment-shaped /cdp/track or /cdp/identify payload is verified, persisted to tenant_*.cdp_events, and identity- resolved against tenant_*.contacts. |
cdp.identity.resolved | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Other
| Event | Description |
|---|---|
email.opened | Email engagement events (Resend webhook surface). |
email.clicked | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
video.recording.degraded | PARITY-RTC-R1 (2026-05-29) — video room recording QC verdict. |
video.room.started | GAP-RTC-R2 (2026-05-29) — video room + participant + recording lifecycle webhook fan-out. |
video.room.ended | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
video.participant.joined | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
video.participant.left | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
video.recording.completed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
video.recording.failed | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
ticket.deflected | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
wallboard.sla_warning | Voice-queue wallboard SLA early-warning (CCaaS). |
wfm.adherence_breach | WFM intraday adherence breach (CCaaS / WFM pillar, 2026-05-30). |
survey.csat.response_recorded | Post-call IVR survey response recorded (CCaaS, 2026-05-30). |
survey.nps.response_recorded | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
queue.call.queued | CCaaS queue-routing lifecycle webhooks (Five9 / Genesys parity — Interaction.Routed / Interaction.Abandoned). |
queue.call.abandoned | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
queue.call.assigned | Platform-defined webhook event. See source comment in packages/shared/src/constants.ts for context. |
Message Events
message.created
Fired when an outbound message is accepted and queued for delivery.
message.sent
Fired when the message is handed off to the carrier / provider.
message.delivered
message.failed
Terminal failure reported by the carrier (or a synthesised failure
covering undelivered / rejected).
message.read
message.received
Inbound message from a recipient.
Contact Events
contact.created
contact.updated
contact.deleted
contact.merged
contact.bulk_imported
Fired once per bulk import batch (CSV upload or POST /v1/contacts/bulk),
not once per row. The payload summarises the whole batch.
| Field | Type | Description |
|---|---|---|
imported | integer | New contact rows created on this batch |
updated | integer | Existing contact rows merged on this batch (upsert toggle on) |
failed | integer | Rows rejected by validation / dedup / DB constraint |
total | integer | imported + updated + failed |
import_batch_id | string | null | Stable identifier for this batch — present when the API was able to persist the import-jobs row; null only on legacy in-line imports without a job row |
contact.opted_in / contact.opted_out
Fired when a recipient sends a START / STOP keyword on a registered
channel.
contact.recertification_due
FCC RMD annual consent recertification window opened on a contact.
contact.segment_changed
Predictive scorer flipped a contact’s segment label (e.g.
champion → at_risk, passive → engaged). Useful for triggering
re-engagement plays from a CRM.
Campaign Events
campaign.created / campaign.updated / campaign.deleted
campaign.started
campaign.completed
campaign.paused / campaign.resumed
campaign.drip_step.completed
Single drip step finished sending to its slice.
campaign.drip.completed
Entire drip campaign finished its full schedule.
Voice Events
call.initiated
call.answered
call.completed
call.failed
call.transferred
call.dtmf_sent
Mid-call DTMF inject through the API.
call.recording.paused / call.recording.resumed
SIPREC fork toggled mid-call.
call.recording.ready
call.transcription.ready
call.synthesis.ready (legacy inline pipeline)
call.synthesized (post-call synthesis pipeline)
Richer payload from the async synthesis scheduler. Gated on tenant
opt-in.
call.ringing
Fires when an inbound call is detected by the SIP edge but before it is answered. Useful for “live caller is dialing in” UI updates without waiting for the post-answer call.answered event.
INVITE to the SIP edge.
Retry behaviour: standard webhook retry (exponential 1m → 5m → 15m → 1h → 6h, 5 attempts max). Idempotent — multiple ring callbacks during a single call can fire if the call is being routed via multiple ring-group legs.
Note (current implementation): ringing is currently bundled with the call.initiated event for inbound calls. The standalone call.ringing event is emitted by the underlying carrier webhook but only forwarded to tenant subscribers when the org explicitly subscribes. If call.ringing is missing from your delivery, fall back to listening for call.initiated with status: "ringing".
call.early_media
Fires when the carrier begins streaming pre-answer audio — a SIP 180 Ringing response carrying SDP. This is the moment ringback tone, IVR prompts, voicemail greetings, or answering-machine-detection (AMD) audio start playing into the bridge BEFORE the destination has formally answered (200 OK). Useful for IVR routing decisions, AMD branching, and accurate “Ringing…” → “Audio streaming” UX transitions on softphone clients.
180 Ringing with an application/sdp body, OR a 183 Session Progress with SDP. Distinct from call.ringing (which fires on 180 Ringing WITHOUT SDP, i.e. headers-only ringback).
Retry behaviour: standard webhook retry (exponential 1m → 5m → 15m → 1h → 6h, 5 attempts max). The event is fire-and-forget — a subsequent call.answered event always follows on the same call_id once the destination picks up.
Note (current implementation): the event is published both on the tenant SSE channel (events:tenant_<id>) for live dashboard updates AND via signed webhooks for subscribers who opt in. The SSE channel is what powers the browser softphone’s “Audio streaming” label and the <audio> element’s autoplay-unblock call; the webhook is the durable delivery path for backend systems.
Conference Events
Conference lifecycle events fire from the conference service inapps/api/src/routes/voice/. The events ride the same delivery + retry semantics as call events.
conference.created
Fires when POST /api/v1/voice/conferences succeeds.
conference.participant_joined
Fires when a new participant successfully joins (after 200 OK to the SIP INVITE for that leg).
conference.participant_left
Fires when a participant disconnects — either via DELETE API call, BYE from the carrier, or the conference moderator’s end-conference action.
reason values: normal_disconnect (BYE from participant), kicked (DELETE via API), conference_ended (moderator ended), network_failure (RTP timeout).
conference.ended
Fires when the conference’s active participant count drops to zero, or moderator hits end-conference. Always the LAST event for a conference id.
ended_reason values: moderator_ended, last_participant_left, max_duration_reached.
Recording Events
recording.started
Fires when POST /api/v1/voice/calls/{id}/recording/start (or the per-call record:true flag) starts a fresh recording.
recording.completed
Alias for call.recording.ready (same payload + same recording_url). Documented separately because the call-id may not be available for conference recordings — those carry conference_id instead.
recording.failed
Fires when an upstream recording attempt fails (storage write failure, codec mismatch, AMD aborted the recording before any audio was captured).
voicemail.received
voicemail.transcript_updated
Fires when an originally-missing voicemail transcript is recovered by
the retry pipeline.
recording.retention_deleted
Fires 24h before a retention-driven GCS purge so tenants can mirror
the asset to their own archive. Payload carries a signed download URL
valid until purge_scheduled_at.
Agent Events
agent.created / agent.updated / agent.deleted / agent.deployed
agent.conversation.started
agent.conversation.ended
agent.handoff.requested
Agent escalated to a human operator.
agent.handoff_occurred
Agent delegated to another specialist agent through the
transfer_to_agent tool.
agent.calendar_event.created
Fires from the agent’s create_calendar_event MCP tool.
Flow Events
flow.created / flow.updated / flow.published / flow.deleted
flow.executed
Coarse terminal signal. status is completed, failed, or
timeout.
flow.execution.started
flow.execution.completed
flow.execution.failed
Verification Events
The platform uses theverification.* prefix (not verify.*).
verification.sent
sim_swap_warning: true is
included alongside the payload above.
verification.approved
channel is
"silent".
verification.failed
reason: "sim_swap_detected"
plus last_swap_date are included.
Number / Porting Events
number.purchased
reclaimed: true is included when the number was re-claimed from
the parking pool.
number.released
number.ported
porting.request.cancelled
Customer aborted an in-flight port.
Conversation Events
conversation.created
List / Segment Events
Webhook Endpoint Events
Billing Events
balance.low
balance.topped_up
credits.purchased (deprecated alias of balance.topped_up)
Same data plus a legacy credits field. Prefer balance.topped_up
for new integrations.
Channel Failover Events
channel.failover
Fired when a messaging channel’s primary provider failed and Orbit
automatically switched to a backup.
Push Events
push.delivered
Mobile / web SDK acknowledged a push was rendered on-device.
push.opened
User tapped the push and the SDK reported the open.
Number Masking (Proxy) Events
proxy.session.created
proxy.session.closed
proxy.message.forwarded
WhatsApp Events
WhatsApp events mirror Meta WABA webhook fields. Each fires after Orbit ingests the corresponding Meta callback and persists the upstream change. Payloads carry the relevantwaba_id /
phone_number_id so consumers can correlate to their own Meta tooling.
WhatsApp Calling
The lifecycle events (whatsapp.call.connected, _accepted,
_terminated) share the same payload shape; the legacy
whatsapp.call.received is also dispatched on every transition for
backward-compatible consumers.
whatsapp.call.permission_granted:
whatsapp.call.permission_revoked:
WhatsApp Templates
Sample forwhatsapp.template.approved (others share the same shape
with the relevant Meta payload echoed under details):
whatsapp.template.rejected includes details.reason with Meta’s
rejection text.
WhatsApp Account / Business / Phone
whatsapp.account.update, whatsapp.account.banned,
whatsapp.account.restricted, whatsapp.account.alert,
whatsapp.account.review_update, whatsapp.account.settings_update,
whatsapp.business.status_update, whatsapp.phone.quality_update,
whatsapp.phone.name_update, whatsapp.capability.update,
whatsapp.security.alert, whatsapp.flow.status_change,
whatsapp.quality.changed — all share the shape:
WhatsApp Data Subject Requests
whatsapp.data.delete_request follows the same shape.
WhatsApp v25 fields
whatsapp.automatic_events, whatsapp.history,
whatsapp.partner_solutions, whatsapp.payment_configuration_update,
whatsapp.smb.app_state_sync, whatsapp.smb.message_echoes,
whatsapp.tracking_events, whatsapp.user.preferences,
whatsapp.group.lifecycle_update, whatsapp.group.participants_update,
whatsapp.group.settings_update, whatsapp.group.status_update — each
carries the original Meta event payload under details:
Subscribing to Events
Register a webhook and specify which events to receive:"events": ["*"] to subscribe to all event types. Subscribing to
a name not listed on this page returns a 422.
See also
- Webhook Events Catalog — one-line description per event
- Webhook Overview — delivery, signing, and retry semantics
- Webhook Security — verifying signatures