Skip to main content

Campaign Webhooks

Receive real-time notifications about call and campaign status changes.

Webhook Types​

WebhookFires WhenConfigured Via
Call Status CallbackEach call attempt completescall_status_callback
Call Schedule CallbackAll retries for a number are exhaustedcall_schedule_callback
Campaign Status CallbackCampaign finishesstatus_callback

Call Status Callback​

Fires on every individual call attempt (including retries).

Payload​

{
"campaign_sid": "camp_abc123",
"call_sid": "call_def456",
"date_created": "2024-01-15T09:05:00+05:30",
"date_updated": "2024-01-15T09:05:47+05:30",
"number": "+919876543210",
"status": "completed"
}

Fields​

FieldDescription
campaign_sidCampaign identifier
call_sidUnique call identifier
numberCalled phone number
statuscompleted, failed, busy, no-answer
date_createdCall creation timestamp
date_updatedLast status update timestamp

Call Schedule Callback​

Fires after all retries for a specific number are exhausted — whether the call ultimately succeeded or failed.

Payload​

{
"campaign_sid": "camp_abc123",
"to": "+919876543210",
"from": "0XXXXXX4890",
"call_sids": ["call_def456", "call_ghi789", "call_jkl012"],
"status": "failed",
"date_created": "2024-01-15T09:05:00+05:30",
"date_updated": "2024-01-15T09:35:00+05:30"
}

Fields​

FieldDescription
campaign_sidCampaign identifier
toCalled phone number
fromExoPhone used
call_sidsArray of all call attempt SIDs for this number
statusFinal status after all retries

Campaign Status Callback​

Fires once when the entire campaign completes (all numbers processed).

Payload​

{
"campaign_sid": "camp_abc123",
"status": "Completed",
"date_created": "2024-01-14T16:30:00+05:30",
"date_updated": "2024-01-15T18:00:00+05:30",
"report_url": "https://s3.amazonaws.com/.../campaign_report.csv"
}

Fields​

FieldDescription
campaign_sidCampaign identifier
statusFinal campaign status: Completed, Failed, Canceled
report_urlURL to download the full campaign report (CSV)

Best Practices​

  • Always respond with HTTP 200 to webhook requests to prevent retries
  • Process webhooks asynchronously — don't block the response
  • Use call_status_callback for real-time monitoring dashboards
  • Use call_schedule_callback to trigger follow-up actions (e.g., SMS to unreachable numbers)
  • Use status_callback to get the final campaign report URL