{
"id": "whd_6f2b3c4d5e6f40718293a4b5c6d7e8f9",
"type": "campaign.paused",
"created_at": "2026-10-26T06:00:00.000Z",
"data": {
"campaign": {
"id": "cmp_7c1d2e3f4a5b4c6d8e9f0a1b2c3d4e5f",
"tenant_id": "ten_credfin",
"name": "Credfin pre-due Nov",
"description": "EMI due 5 Nov",
"status": "paused",
"input_type": "csv",
"agent": {
"id": "agt_credfin_predue_m",
"name": "Credfin pre-due (Hindi, male)"
},
"agent_contract": {
"required_variables": [
"borrower_first_name",
"emi_amount",
"due_date"
],
"optional_variables": [
"lender_name"
],
"default_variables": {
"lender_name": "Credfin"
},
"post_call_variables": [
{
"name": "payment_date",
"type": "date",
"description": "Date the customer said they will pay",
"options": []
},
{
"name": "callback_at",
"type": "datetime",
"description": "When the customer asked to be called back",
"options": []
}
],
"outcomes": [
"confirmed_on_time",
"paid_early",
"callback_scheduled",
"do_not_call",
"wrong_number",
"refused",
"not_reached"
],
"read_at": "2026-10-24T05:00:00.000Z"
},
"goal": {
"outcomes": [
"confirmed_on_time",
"paid_early"
],
"label": "Confirmed or paid"
},
"variables": {
"static": {
"lender_name": "Credfin"
}
},
"csv": {
"phone_column": "phone_number",
"mapping": {
"borrower_first_name": "Name",
"emi_amount": "EMI"
},
"external_id_column": "loan_id"
},
"schedule": {
"start_date": "2026-10-26",
"end_date": "2026-11-05",
"timezone": "Asia/Kolkata",
"time_window_enabled": true,
"daily_start_time": "09:00",
"daily_end_time": "18:00",
"active_days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
]
},
"execution": {
"max_concurrency": 20,
"max_attempts": 3,
"dnc_enabled": true,
"reschedule_enabled": true,
"dial_first_attempt_immediately": false,
"skip_duplicates": true,
"skip_invalid_phones": true,
"budget_micros": 5000000000,
"pause_reason": "budget",
"pause_details": {
"budget_micros": 5000000000,
"spend_micros": 4990000000
}
},
"attempts": [
{
"attempt_number": 1,
"day": 1,
"start_time": "10:00",
"instant_redial": true,
"instant_redial_delay_minutes": 5,
"instant_redial_on_statuses": [
"no_answer",
"busy"
],
"conditions": {}
},
{
"attempt_number": 2,
"day": 1,
"start_time": "16:00",
"instant_redial": false,
"instant_redial_delay_minutes": 0,
"instant_redial_on_statuses": [],
"conditions": {
"previous_status_in": [
"no_answer",
"busy"
]
}
},
{
"attempt_number": 3,
"day": 2,
"start_time": "11:00",
"instant_redial": false,
"instant_redial_delay_minutes": 0,
"instant_redial_on_statuses": [],
"conditions": {}
}
],
"retry": {
"retry_on_no_answer": true,
"retry_on_busy": true,
"retry_on_short_call": true,
"short_call_threshold_seconds": 10,
"retry_delay_minutes": 30,
"insight_based_retry_conditions": []
},
"outcome_rules": {
"do_not_call": [
"do_not_call"
],
"callback": [
"callback_scheduled"
],
"wrong_number": [
"wrong_number"
],
"callback_variable": "callback_at"
},
"metadata": {
"portfolio": "nov-predue"
},
"counts": {
"total": 1200,
"pending": 720,
"calling": 0,
"completed": 431,
"exhausted": 25,
"closed": 12,
"skipped": 12
},
"results": {
"success": 286,
"wrong_number": 24,
"final_outcome": 121,
"exhausted": 25,
"end_date": 0,
"do_not_call": 6,
"paid": 6,
"canceled": 0,
"invalid_phone": 7,
"duplicate": 3,
"missing_variables": 2
},
"success_rate": 24.1,
"spend": {
"amount_micros": 1840000000,
"status": "pending",
"calls": 412,
"budget_micros": 5000000000
},
"collected": {
"amount_micros": 91480000000,
"events": 20
},
"window": {
"open_now": true,
"closes_at": "2026-10-26T12:30:00.000Z",
"next_open_at": null
},
"pause_reason": "budget",
"pause_details": {
"budget_micros": 5000000000,
"spend_micros": 4990000000
},
"test_report": {
"status": "passed_with_warnings",
"ran_at": "2026-10-25T10:00:00.000Z",
"checks": [
{
"id": "agent",
"level": "ok",
"title": "Agent",
"detail": "Credfin pre-due (Hindi, male) is active."
},
{
"id": "numbers",
"level": "ok",
"title": "Outbound numbers",
"detail": "2 usable numbers."
},
{
"id": "goal",
"level": "ok",
"title": "Goal",
"detail": "Success: confirmed_on_time, paid_early."
},
{
"id": "records",
"level": "ok",
"title": "Records",
"detail": "1188 of 1200 records will be called."
},
{
"id": "skipped",
"level": "warning",
"title": "Skipped records",
"detail": "12 (1%) will not be called: 7 invalid phone, 3 duplicate, 2 missing variables."
},
{
"id": "dnc",
"level": "warning",
"title": "Do-not-call list",
"detail": "4 records are on the do-not-call list and will be closed."
},
{
"id": "window",
"level": "ok",
"title": "Calling hours",
"detail": "First calls possible 2026-10-26 09:00 (Asia/Kolkata)."
},
{
"id": "ladder",
"level": "ok",
"title": "Attempt ladder",
"detail": "3 attempts per record."
},
{
"id": "capacity",
"level": "ok",
"title": "Capacity",
"detail": "About 2138 attempts, roughly 3.6 calling hours at 20 parallel calls."
}
],
"timeline": [
{
"attempt_number": 1,
"at": "2026-10-26T04:30:00.000Z",
"local": "2026-10-26 10:00",
"note": "day 1 from 10:00; redials 5 min later on no_answer, busy"
},
{
"attempt_number": 2,
"at": "2026-10-26T10:30:00.000Z",
"local": "2026-10-26 16:00",
"note": "day 1 from 16:00; only if its conditions hold"
},
{
"attempt_number": 3,
"at": "2026-10-27T05:30:00.000Z",
"local": "2026-10-27 11:00",
"note": "day 2 from 11:00"
}
],
"samples": [
{
"phone": "+9198XXXXXX01",
"variables": {
"borrower_first_name": "Ravi",
"emi_amount": "4574",
"due_date": "2026-11-05",
"lender_name": "Credfin"
}
}
],
"estimate": {
"records": 1188,
"expected_attempts": 2138,
"calls_per_hour": 600,
"open_hours": 81,
"hours_needed": 3.6,
"fits_schedule": true
}
},
"locked": true,
"actions": [
"edit",
"resume",
"cancel",
"duplicate"
],
"duplicated_from": null,
"launched_at": "2026-10-25T09:55:00.000Z",
"tested_at": "2026-10-25T10:00:00.000Z",
"locked_at": "2026-10-26T04:30:05.000Z",
"started_at": "2026-10-26T04:30:00.000Z",
"paused_at": "2026-10-26T06:00:00.000Z",
"completed_at": null,
"canceled_at": null,
"created_at": "2026-10-24T05:00:00.000Z",
"updated_at": "2026-10-26T06:00:00.000Z"
},
"reason": "budget",
"details": {
"budget_micros": 5000000000,
"spend_micros": 4990000000
}
}
}Campaign paused
Sent when a campaign pauses. reason says why (see CampaignPauseReason): manual (you paused it),
credits (your account cannot place calls right now), unroutable (no usable outbound number, or the agent
is gone or switched off), budget (the next calls would pass execution.budget_micros), failures (the
last 20 attempts all failed on our side) or disabled (campaigns were switched off for your account).
details carries the facts behind the reason, or null. Resuming is always up to you (POST .../resume).
{
"id": "whd_6f2b3c4d5e6f40718293a4b5c6d7e8f9",
"type": "campaign.paused",
"created_at": "2026-10-26T06:00:00.000Z",
"data": {
"campaign": {
"id": "cmp_7c1d2e3f4a5b4c6d8e9f0a1b2c3d4e5f",
"tenant_id": "ten_credfin",
"name": "Credfin pre-due Nov",
"description": "EMI due 5 Nov",
"status": "paused",
"input_type": "csv",
"agent": {
"id": "agt_credfin_predue_m",
"name": "Credfin pre-due (Hindi, male)"
},
"agent_contract": {
"required_variables": [
"borrower_first_name",
"emi_amount",
"due_date"
],
"optional_variables": [
"lender_name"
],
"default_variables": {
"lender_name": "Credfin"
},
"post_call_variables": [
{
"name": "payment_date",
"type": "date",
"description": "Date the customer said they will pay",
"options": []
},
{
"name": "callback_at",
"type": "datetime",
"description": "When the customer asked to be called back",
"options": []
}
],
"outcomes": [
"confirmed_on_time",
"paid_early",
"callback_scheduled",
"do_not_call",
"wrong_number",
"refused",
"not_reached"
],
"read_at": "2026-10-24T05:00:00.000Z"
},
"goal": {
"outcomes": [
"confirmed_on_time",
"paid_early"
],
"label": "Confirmed or paid"
},
"variables": {
"static": {
"lender_name": "Credfin"
}
},
"csv": {
"phone_column": "phone_number",
"mapping": {
"borrower_first_name": "Name",
"emi_amount": "EMI"
},
"external_id_column": "loan_id"
},
"schedule": {
"start_date": "2026-10-26",
"end_date": "2026-11-05",
"timezone": "Asia/Kolkata",
"time_window_enabled": true,
"daily_start_time": "09:00",
"daily_end_time": "18:00",
"active_days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
]
},
"execution": {
"max_concurrency": 20,
"max_attempts": 3,
"dnc_enabled": true,
"reschedule_enabled": true,
"dial_first_attempt_immediately": false,
"skip_duplicates": true,
"skip_invalid_phones": true,
"budget_micros": 5000000000,
"pause_reason": "budget",
"pause_details": {
"budget_micros": 5000000000,
"spend_micros": 4990000000
}
},
"attempts": [
{
"attempt_number": 1,
"day": 1,
"start_time": "10:00",
"instant_redial": true,
"instant_redial_delay_minutes": 5,
"instant_redial_on_statuses": [
"no_answer",
"busy"
],
"conditions": {}
},
{
"attempt_number": 2,
"day": 1,
"start_time": "16:00",
"instant_redial": false,
"instant_redial_delay_minutes": 0,
"instant_redial_on_statuses": [],
"conditions": {
"previous_status_in": [
"no_answer",
"busy"
]
}
},
{
"attempt_number": 3,
"day": 2,
"start_time": "11:00",
"instant_redial": false,
"instant_redial_delay_minutes": 0,
"instant_redial_on_statuses": [],
"conditions": {}
}
],
"retry": {
"retry_on_no_answer": true,
"retry_on_busy": true,
"retry_on_short_call": true,
"short_call_threshold_seconds": 10,
"retry_delay_minutes": 30,
"insight_based_retry_conditions": []
},
"outcome_rules": {
"do_not_call": [
"do_not_call"
],
"callback": [
"callback_scheduled"
],
"wrong_number": [
"wrong_number"
],
"callback_variable": "callback_at"
},
"metadata": {
"portfolio": "nov-predue"
},
"counts": {
"total": 1200,
"pending": 720,
"calling": 0,
"completed": 431,
"exhausted": 25,
"closed": 12,
"skipped": 12
},
"results": {
"success": 286,
"wrong_number": 24,
"final_outcome": 121,
"exhausted": 25,
"end_date": 0,
"do_not_call": 6,
"paid": 6,
"canceled": 0,
"invalid_phone": 7,
"duplicate": 3,
"missing_variables": 2
},
"success_rate": 24.1,
"spend": {
"amount_micros": 1840000000,
"status": "pending",
"calls": 412,
"budget_micros": 5000000000
},
"collected": {
"amount_micros": 91480000000,
"events": 20
},
"window": {
"open_now": true,
"closes_at": "2026-10-26T12:30:00.000Z",
"next_open_at": null
},
"pause_reason": "budget",
"pause_details": {
"budget_micros": 5000000000,
"spend_micros": 4990000000
},
"test_report": {
"status": "passed_with_warnings",
"ran_at": "2026-10-25T10:00:00.000Z",
"checks": [
{
"id": "agent",
"level": "ok",
"title": "Agent",
"detail": "Credfin pre-due (Hindi, male) is active."
},
{
"id": "numbers",
"level": "ok",
"title": "Outbound numbers",
"detail": "2 usable numbers."
},
{
"id": "goal",
"level": "ok",
"title": "Goal",
"detail": "Success: confirmed_on_time, paid_early."
},
{
"id": "records",
"level": "ok",
"title": "Records",
"detail": "1188 of 1200 records will be called."
},
{
"id": "skipped",
"level": "warning",
"title": "Skipped records",
"detail": "12 (1%) will not be called: 7 invalid phone, 3 duplicate, 2 missing variables."
},
{
"id": "dnc",
"level": "warning",
"title": "Do-not-call list",
"detail": "4 records are on the do-not-call list and will be closed."
},
{
"id": "window",
"level": "ok",
"title": "Calling hours",
"detail": "First calls possible 2026-10-26 09:00 (Asia/Kolkata)."
},
{
"id": "ladder",
"level": "ok",
"title": "Attempt ladder",
"detail": "3 attempts per record."
},
{
"id": "capacity",
"level": "ok",
"title": "Capacity",
"detail": "About 2138 attempts, roughly 3.6 calling hours at 20 parallel calls."
}
],
"timeline": [
{
"attempt_number": 1,
"at": "2026-10-26T04:30:00.000Z",
"local": "2026-10-26 10:00",
"note": "day 1 from 10:00; redials 5 min later on no_answer, busy"
},
{
"attempt_number": 2,
"at": "2026-10-26T10:30:00.000Z",
"local": "2026-10-26 16:00",
"note": "day 1 from 16:00; only if its conditions hold"
},
{
"attempt_number": 3,
"at": "2026-10-27T05:30:00.000Z",
"local": "2026-10-27 11:00",
"note": "day 2 from 11:00"
}
],
"samples": [
{
"phone": "+9198XXXXXX01",
"variables": {
"borrower_first_name": "Ravi",
"emi_amount": "4574",
"due_date": "2026-11-05",
"lender_name": "Credfin"
}
}
],
"estimate": {
"records": 1188,
"expected_attempts": 2138,
"calls_per_hour": 600,
"open_hours": 81,
"hours_needed": 3.6,
"fits_schedule": true
}
},
"locked": true,
"actions": [
"edit",
"resume",
"cancel",
"duplicate"
],
"duplicated_from": null,
"launched_at": "2026-10-25T09:55:00.000Z",
"tested_at": "2026-10-25T10:00:00.000Z",
"locked_at": "2026-10-26T04:30:05.000Z",
"started_at": "2026-10-26T04:30:00.000Z",
"paused_at": "2026-10-26T06:00:00.000Z",
"completed_at": null,
"canceled_at": null,
"created_at": "2026-10-24T05:00:00.000Z",
"updated_at": "2026-10-26T06:00:00.000Z"
},
"reason": "budget",
"details": {
"budget_micros": 5000000000,
"spend_micros": 4990000000
}
}
}Headers
The event type, same as the body's type.
call.ended, call.analyzed, call.status_changed, reachability.result, reachability.completed, campaign.started, campaign.paused, campaign.resumed, campaign.completed, campaign.canceled, campaign.record.updated, call.dispositioned, dialer.contact_updated Delivery id (whd_...), same as the body's id. Stays the same across retries of one delivery: use it to
drop duplicates.
t=<unix seconds>,v1=<hex HMAC-SHA256(secret, t + "." + raw body)>. t is the time of this delivery try.
Verify it before trusting the body (see the Webhooks tag and the event descriptions).
^t=\d+,v1=[0-9a-f]{64}$Always voice-gateway-webhooks/1.
"voice-gateway-webhooks/1"Body
Response
Any 2xx status, within 10 seconds, acknowledges the delivery (the body is ignored). Anything else (other statuses, timeouts, connection errors) is retried: 8 tries in total, 30 seconds after the first failure, then doubling (30 s, 1 min, 2 min, 4 min, 8 min, 16 min, 32 min; about 63 minutes in all). Redirects are not a supported answer.