Campaign calls API
Monitor and control the outbound voice calls a campaign places. Every campaign call is tracked as a first-class record with its lifecycle status, timestamps, and duration. Requires the campaigns.read / campaigns.write permission.
The campaign call object
{
"id": "uuid",
"campaign_id": "uuid",
"call_sid": "CA…",
"to_number": "+14165550199",
"status": "in_progress",
"ended_reason": null,
"conversation_id": "uuid",
"started_at": "2026-05-17T20:08:48Z",
"answered_at": "2026-05-17T20:08:49Z",
"ended_at": null,
"duration_seconds": null
}status walks the outbound queue's lifecycle: queued, claimed, dialing, initiated, ringing, in_progress, then a terminal state — completed, busy, failed, no_answer, canceled, or expired. ended_reason can be twilio (ended naturally), hangup (stopped by an operator), max_duration (cut off at the campaign cap), canceled, expired, blocked, or error. conversation_id links to the resulting transcript in the Conversations API.
List calls
GET /api/v1/rest/campaigns/:id/calls ?active=1 &status=Pass ?active=1 to return only calls in flight right now — the live monitoring view.
Get one call
GET /api/v1/rest/campaigns/:id/calls/:callIdStop a call
POST /api/v1/rest/campaigns/:id/calls/:callId/hangupStops the call wherever it is: a still-queued call is canceled before it dials (ended_reason: "canceled"); a live call is hung up (ended_reason: "hangup"). The response reports which happened.