Suppress many numbers at once (CSV upload)
Up to 1,000 per request, as one transaction — it either all lands or none of it does. This is how you bring an existing suppression list with you.
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/dnc/bulk" \ -H "Content-Type: application/json" \ -d '{ "entries": [ { "e164": "+919876543210", "lockout90d": false, "reason": "Asked to be removed during a call on 2026-08-20.", "source": "manual" } ] }'{ "data": [ { "createdAt": "2026-08-25T09:14:22Z", "e164": "+919876543210", "expiresAt": "2026-11-23T09:14:22Z", "id": "8814", "reason": "Asked to be removed during a call on 2026-08-20.", "removedAt": null, "removedReason": null, "source": "manual", "sourceCallId": null } ]}Suppress a number (idempotent)
Adding a number already on the list is a no-op rather than an error, so a replayed webhook or a retried job cannot fail here. Use lockout90d for an opt-out, which becomes contactable again on a date, rather than a permanent suppression.
Numbers on the Do-Not-Call list
Your own suppression list — the only list the gate hard-blocks on. Search accepts whatever someone types: +91 98765 43210, 09876543210 and 4321 all work.