Webhooks

Receive real-time events for calls, voicemail, and device activity

PBX sends webhook events for call lifecycle, voicemail, recording, and device registration changes. Configure webhook endpoints in the Webhooks & Events dashboard.

Event Types

Call Events

EventTrigger
pbx.call.startedCall initiated (inbound, outbound, or internal)
pbx.call.answeredCall connected to destination
pbx.call.completedCall ended
pbx.call.transferredCall transferred to new destination
pbx.call.recording.readyRecording processed and available for download

Voicemail Events

EventTrigger
pbx.voicemail.receivedNew voicemail deposited with transcription

Queue Events

EventTrigger
pbx.queue.caller.joinedCaller entered a queue
pbx.queue.caller.connectedCaller connected to an agent
pbx.queue.caller.abandonedCaller hung up while waiting
pbx.queue.caller.timeoutCaller exceeded max wait time

Device Events

EventTrigger
pbx.extension.registeredPhone/device registered to an extension
pbx.extension.unregisteredPhone/device unregistered

Payload Example

pbx.call.completed

{
  "event": "pbx.call.completed",
  "timestamp": "2026-03-26T14:35:00Z",
  "data": {
    "callId": "call_abc123",
    "direction": "inbound",
    "from": "5551234567",
    "to": "2395559876",
    "extensionNumber": "101",
    "extensionName": "Front Desk",
    "duration": 245,
    "status": "answered",
    "recordingId": "rec_xyz789",
    "queueId": null,
    "transferredFrom": null
  }
}

pbx.voicemail.received

{
  "event": "pbx.voicemail.received",
  "timestamp": "2026-03-26T14:36:00Z",
  "data": {
    "mailboxId": "vm_101",
    "extensionNumber": "101",
    "callerNumber": "5551234567",
    "duration": 32,
    "transcription": "Hi, this is John from XYZ Corp. I'm calling about the proposal we discussed...",
    "sentiment": "positive",
    "summary": "John from XYZ Corp following up on a proposal discussion.",
    "audioUrl": "https://pbx.dev/storage/vm_abc123.wav"
  }
}

Security

Webhook payloads are signed with HMAC-SHA256. Verify the X-Webhook-Signature header to ensure the request originated from do.dev. See Signature Verification for implementation details.