medium):
API key scopes needed:
voice-calls:read and voice-calls:write.
Start a call
clientId and debtId are required: every call is about one of the client’s open debts.
The response is the call with status: "queued" (or "awaiting_permission" on WhatsApp) and a warnings array of non-blocking notices, for example when you set allowOutsideWindow: true to call outside the flow’s time window.
Errors
All follow RFC 9457. Decide bycode:
Track a call
status lifecycle: queued → (awaiting_permission →) dialing → in_progress → completed | failed. cancelled is only possible before dialing (POST /voice-calls/{id}/cancel).
When a call ends it gets an outcome:
summary and transcript are in Portuguese. analysis.source tells you whether the outcome came from recorded tool actions (deterministic), from the provider, or was inferred by AI from the transcript.
Recording
GET /voice-calls/{id}/recording returns { "url": "...", "expiresInSeconds": 86400 } with a signed URL. Use ?redirect=1 for a direct 302 to the file. Recordings are kept for up to 180 days.
Webhook
voice_call.completed fires when each call ends (see Webhooks):
Pricing
Charged per started minute of answered calls (voice_call_minute) plus a fixed fee per unanswered attempt (voice_call_attempt). Current values are in GET /voice-calls/config.