Reference

Webhooks

Inbound webhooks from telephony providers, outbound reporting webhooks, and event callbacks.

Inbound webhooks (from telephony providers)

These endpoints are called by telephony providers (Twilio, Plivo, Exotel) during call lifecycle events. They are configured automatically when you set up a provider.

Call Answered

POST /{provider}/answer

Call Status Callback

POST /{provider}/callback/status

Call Details Callback

POST /{provider}/callback/details

Warm Transfer Callbacks

POST /{provider}/callback/transfer/status
POST /{provider}/callback/transfer/events

Provider Placeholder

Replace {provider} with the actual provider name: twilio, plivo, or exotel.

Outbound webhooks (to external systems)

Breeze Buddy sends webhook notifications to your systems at various points in the call lifecycle.

Reporting webhook

The reporting_webhook_url supplied at push time is stored inside the lead’s payload dict and called after the call finishes. Successful and failing calls produce different payload shapes.

Successful completion — called when the conversation reaches end_conversation cleanly.

reporting-webhook-success.json
json
{
  "orderId": "req_unique_001",
  "leadId": "2b4e3e4a-9c5e-4b6a-ae7f-3d8e2c1a5b77",
  "callSid": "CA1234567890abcdef",
  "outcome": "confirmed",
  "status": "FINISHED",
  "attemptCount": 1,
  "transcription": [
    { "role": "assistant", "content": "Hello Rahul..." },
    { "role": "user", "content": "Yes, that works." }
  ],
  "recordingUrl": "https://storage/.../recording.mp3",
  "completedAt": "2026-02-01T10:36:15Z"
}

Failure — called when the call fails for any reason (pre-check skip, no answer, telephony error).

reporting-webhook-failure.json
json
{
  "orderId": "req_unique_001",
  "leadId": "2b4e3e4a-9c5e-4b6a-ae7f-3d8e2c1a5b77",
  "outcome": "PRECHECK_FAILED",
  "attemptCount": 1,
  "failureReason": "DND Check returned blocked=true"
}

Field names are camelCase. The full final lead record is available via GET /leads/{id} — the webhook is a push notification; fetch the full state if you need more than what arrives.

Webhook retry behaviour

There is no exponential backoff. send_webhook_with_retry attempts up to 3 deliveries back-to-back with no inter-attempt delay. If the receiver is rate-limiting or momentarily slow, the three retries all fail within the same second. Design your receiver to be idempotent on orderId/leadId — the same webhook can arrive twice if an upstream retry kicks in.

Service Callback

The service_callback is an end-of-conversation callback triggered when the voice pipeline finishes processing. Delivers the final conversation state to the configured endpoint.

Hook HTTP Requests

Templates can define HTTP request hooks on functions. When a function is triggered during conversation, its HTTP hook fires — enabling real-time CRM updates, database writes, or third-party API calls.

json
{
  "hooks": [
    {
      "name": "update_crm",
      "http_request": {
        "url": "https://your-crm.com/api/update",
        "method": "POST",
        "headers": { "Authorization": "Bearer {crm_token}" },
        "body": {
          "lead_id": "{lead_id}",
          "outcome": "{outcome}"
        }
      }
    }
  ]
}

Variable Substitution

Hook HTTP request bodies support variable substitution using {variable_name} syntax. See Variable Substitution for details.

DevCycle webhooks

Breeze Buddy integrates with DevCycle for feature flag management. DevCycle sends webhook notifications when feature flags are updated, allowing the system to react to configuration changes in real time.

Error responses

StatusMeaningCommon Cause
400Bad RequestMalformed webhook payload from provider.
404Not FoundLead or call session not found for the callback.
500Server ErrorInternal processing error during webhook handling.
Was this helpful?