Report what happened to a call you placed yourself
Closes the audit loop on a verdict. opt_out revokes consents and suppresses the number for 90 days; complaint suppresses it permanently.
Requires the write scope. A key with less gets 403 insufficient_scope.
Authorization: Bearer tone_live_… or tone_test_…. The prefix IS the environment: a test key reaches only the sandbox, and no request field bridges the two.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/compliance/call-outcomes" \ -H "Content-Type: application/json" \ -d '{ "callReference": "acme-crm-4417", "checkId": "8814", "durationSeconds": 45, "e164": "+919876543210", "notes": "Customer asked to be called after 6pm.", "occurredAt": "2026-08-25T09:14:22Z", "outcome": "connected" }'{ "data": { "consentsRevoked": 0, "e164": "+919876543210", "id": "8814", "outcome": "connected", "suppressed": true }}Pre-dial compliance checks, newest first
Every check ever recorded, from dials and from standalone verdicts alike. Append-only at the database level — this is the audit trail, so nothing here can be edited or deleted after the fact.
Consent records, newest first
Consent is purpose-scoped, so a number can appear several times — once per purpose. active=true filters to the records that would satisfy the gate right now.