{
"id": "whd_4e5f6a7b8c9d40718293a4b5c6d7e8fd",
"type": "reachability.result",
"created_at": "2026-10-12T05:20:16.951Z",
"data": {
"check": {
"id": "rch_4e7b1c9d2a3f4e5b8c6d7a8b9c0d1e2f",
"status": "running",
"mode": "answer",
"from": "+9180XXXXXX79",
"hold_sec": 12,
"ring_sec": null,
"ring_timeout_sec": 45,
"machine_detection": true,
"answer_message": "नमस्ते, यह Credfin से कॉल है। हमारी टीम आपको जल्द ही कॉल करेगी।",
"max_attempts": 2,
"retry_delays_min": [
5
],
"created_at": "2026-10-12T05:20:00.012Z",
"updated_at": "2026-10-12T05:20:00.012Z",
"completed_at": null,
"canceled_at": null,
"counts": {
"total": 3,
"pending": 0,
"dialling": 1,
"reachable": 1,
"voicemail": 0,
"no_answer": 0,
"ringing": 0,
"switched_off": 0,
"busy": 0,
"failed": 0,
"invalid": 0,
"skipped": 1,
"canceled": 0
},
"cost": {
"amount_micros": 0,
"currency": "INR",
"status": "pending"
},
"metadata": {
"campaign": "dpd-8-30-morning"
}
},
"result": {
"number": "+9198XXXXXX01",
"result": "reachable",
"skip_reason": null,
"attempts": 1,
"last_result": "reachable",
"next_attempt_at": null,
"answered_at": "2026-10-12T05:20:16.920Z",
"rang_at": null,
"answered": true,
"detail": null,
"talk_sec": null,
"amd_result": "human",
"hangup_cause": null,
"call_id": "call_6a8c0e2b4d6f4a8c9e1b3d5f7a9c1e3d",
"cost": {
"amount_micros": 0,
"currency": "INR",
"status": "pending"
},
"metadata": {
"loan_id": "CF-LN-208841"
},
"updated_at": "2026-10-12T05:20:16.920Z"
}
}
}Reachability result
Sent once per number when it reaches a final result. For reachable it is sent the moment the person answers
(do not wait for the hold to end; talk_sec and cost are filled in later and readable with
GET /v1/reachability-checks/{id}/results). Skipped numbers get theirs right after the check is created,
canceled numbers at the cancel. If answering-machine detection later turns an answered number into
voicemail, a second, corrected reachability.result for the same number follows. A number waiting for a
retry (no_answer/busy with attempts left; ring check switched_off/busy) sends nothing until its final
result. Ring check: sent once per number when it is final, after the hangup, never on the ring.
{
"id": "whd_4e5f6a7b8c9d40718293a4b5c6d7e8fd",
"type": "reachability.result",
"created_at": "2026-10-12T05:20:16.951Z",
"data": {
"check": {
"id": "rch_4e7b1c9d2a3f4e5b8c6d7a8b9c0d1e2f",
"status": "running",
"mode": "answer",
"from": "+9180XXXXXX79",
"hold_sec": 12,
"ring_sec": null,
"ring_timeout_sec": 45,
"machine_detection": true,
"answer_message": "नमस्ते, यह Credfin से कॉल है। हमारी टीम आपको जल्द ही कॉल करेगी।",
"max_attempts": 2,
"retry_delays_min": [
5
],
"created_at": "2026-10-12T05:20:00.012Z",
"updated_at": "2026-10-12T05:20:00.012Z",
"completed_at": null,
"canceled_at": null,
"counts": {
"total": 3,
"pending": 0,
"dialling": 1,
"reachable": 1,
"voicemail": 0,
"no_answer": 0,
"ringing": 0,
"switched_off": 0,
"busy": 0,
"failed": 0,
"invalid": 0,
"skipped": 1,
"canceled": 0
},
"cost": {
"amount_micros": 0,
"currency": "INR",
"status": "pending"
},
"metadata": {
"campaign": "dpd-8-30-morning"
}
},
"result": {
"number": "+9198XXXXXX01",
"result": "reachable",
"skip_reason": null,
"attempts": 1,
"last_result": "reachable",
"next_attempt_at": null,
"answered_at": "2026-10-12T05:20:16.920Z",
"rang_at": null,
"answered": true,
"detail": null,
"talk_sec": null,
"amd_result": "human",
"hangup_cause": null,
"call_id": "call_6a8c0e2b4d6f4a8c9e1b3d5f7a9c1e3d",
"cost": {
"amount_micros": 0,
"currency": "INR",
"status": "pending"
},
"metadata": {
"loan_id": "CF-LN-208841"
},
"updated_at": "2026-10-12T05:20:16.920Z"
}
}
}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.