Skip to main content

Webhook Events

Orbit emits events across messaging, voice, agents, flows, and account activity. Subscribe to specific events when registering a webhook, or use * to receive all events.
Events marked Active are dispatched by the webhook delivery system today. Events marked Planned are defined in the schema but not yet emitted — they will be enabled in upcoming releases.

Message Events

Fired for SMS, WhatsApp, RCS, Viber, and Email messages.
EventStatusDescription
message.createdPlannedMessage accepted and queued for delivery
message.sendingPlannedMessage is being transmitted to the carrier/provider
message.sentActiveMessage handed off to the carrier/provider
message.deliveredActiveMessage confirmed delivered to the recipient
message.failedActiveMessage delivery failed
message.undeliveredPlannedMessage could not be delivered after retries
message.receivedPlannedInbound message received from a user

Example: message.delivered

{
  "id": "evt_msg_001",
  "type": "message.delivered",
  "created_at": "2026-03-08T12:00:00Z",
  "data": {
    "message_id": "msg_abc123",
    "channel": "sms",
    "from": "+18005551234",
    "to": "+1415555****",
    "status": "delivered",
    "delivered_at": "2026-03-08T12:00:01Z",
    "segments": 1
  }
}

Contact Events

EventStatusDescription
contact.createdActiveA new contact was created
contact.updatedActiveAn existing contact was modified
contact.deletedActiveA contact was removed

Campaign Events

EventStatusDescription
campaign.startedActiveCampaign execution began
campaign.completedActiveCampaign finished sending to all recipients
campaign.failedPlannedCampaign execution failed

Voice Events

EventStatusDescription
call.initiatedPlannedOutbound call placed
call.ringingPlannedDestination is ringing
call.answeredPlannedCall was answered
call.completedPlannedCall ended normally
call.failedPlannedCall failed to connect
call.recording_readyPlannedCall recording is available for download

Example: call.completed

{
  "id": "evt_call_001",
  "type": "call.completed",
  "created_at": "2026-03-08T12:05:00Z",
  "data": {
    "call_id": "call_xyz789",
    "from": "+18005551234",
    "to": "+1415555****",
    "duration_seconds": 142,
    "status": "completed",
    "recording_url": "https://orbit-api.devotel.io/api/v1/recordings/rec_abc123"
  }
}

Agent Events

EventStatusDescription
agent.conversation_startedPlannedAgent began a new conversation
agent.conversation_endedPlannedAgent conversation completed
agent.handoff_requestedPlannedAgent requested transfer to a human
agent.tool_calledPlannedAgent invoked a tool during conversation
agent.errorPlannedAgent encountered an error

Flow Events

EventStatusDescription
flow.execution_startedPlannedFlow execution began
flow.execution_completedPlannedFlow completed all nodes
flow.execution_failedPlannedFlow execution failed at a node
flow.node_executedPlannedA specific node completed execution

Verify Events

EventStatusDescription
verify.startedPlannedVerification code sent
verify.approvedPlannedCode verified successfully
verify.failedPlannedIncorrect code submitted
verify.expiredPlannedCode expired

Account Events

EventStatusDescription
number.purchasedPlannedNew phone number purchased
number.releasedPlannedPhone number released
account.balance_lowPlannedAccount balance below threshold

Filtering Events

When creating a webhook, specify which events to receive:
curl -X POST https://orbit-api.devotel.io/api/v1/webhooks \
  -H "X-API-Key: dv_live_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://yourapp.com/webhooks/orbit",
    "events": ["message.delivered", "message.failed", "call.completed"]
  }'
Use "events": ["*"] to subscribe to all event types.