Calls
A call is one phone conversation run by a phone agent.
POST /v1/calls creates it and starts dialing in a single request — the response comes
back as soon as the carrier accepts, not when the call ends.
Lifecycle
created ──▶ active ──▶ completed
│
└──▶ report generated (reportId appears)| Status | Meaning |
|---|---|
created | The call exists and is dialing |
active | Connected — the conversation is happening |
completed | The call ended, for any reason |
Tracking your own records
Set externalRef when placing the call and it comes back on the call and its report. Put
your booking id, ticket number, or CRM record id there and skip keeping a mapping table:
-d '{ "agentId": "…", "phoneNumber": "+919876543210", "externalRef": "booking-8842" }'Ending a call early
curl -X POST "https://api.rabbitt.ai/api/v1/calls/CALL_ID/hangup" \
-H "Authorization: Bearer $RABBITT_API_KEY"This works only while the call is active. On an already-finished call it returns the
call unchanged rather than erroring, so it is safe to call twice.
Transcript
GET /v1/calls/{id}/transcript returns the turns in order. speaker is agent or
user:
{
"object": "transcript",
"callId": "507f1f77bcf86cd799439022",
"data": [
{ "speaker": "agent", "content": "Hi, this is Bright Dental.", "timestamp": "2026-01-01T10:00:02.000Z" },
{ "speaker": "user", "content": "Yes, Thursday works.", "timestamp": "2026-01-01T10:00:09.000Z" }
]
}The transcript fills in as the call runs, so it is available live, not only at the end.
Billing
Calls are billed in credit minutes against your organization's shared balance. The
chargedMinutes field is settled shortly after the call ends. Placing a call with an
empty balance returns 402.