Run the pre-dial compliance gate for one number, without dialling
Runs the exact checks an outbound call runs (DLT, A2P declaration, calling window, DNC, carrier DND, consent) and records the same audit rows. Returns the verdict instead of enforcing it — use it to pre-flight a number you dial on your own infrastructure.
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/check" \ -H "Content-Type: application/json" \ -d '{ "e164": "+919876543210", "purpose": "promotional" }'{ "data": { "allowed": true, "blockedBy": null, "checks": [ { "callId": "9f1c2d84-4e3a-4f6c-b902-7d1e8a33c451", "checkType": "dnc", "createdAt": "2026-08-25T09:14:22Z", "detail": {}, "e164": "+919876543210", "enforced": true, "id": "8814", "outcome": "pass", "reason": "Asked to be removed during a call on 2026-08-20.", "source": "internal" } ], "e164": "+919876543210", "purpose": "promotional" }}Update a campaign. Only while it is a draft or scheduled.
Everything freezes once the campaign leaves draft: a running campaign is paused, edited and relaunched, not edited in place. agentId cannot be changed at any point.
Pre-flight up to 100 numbers in one call
Each number runs the full gate and is metered as its own verdict, so a batch of 100 costs 100 verdicts. A campaign-sized list belongs in a campaign, which has a pre-flight built for that scale.