Tone API
The +91 phone-number API for AI agents — provision Indian numbers, run TRAI-compliant voice calls, and keep the evidence.
Tone gives an AI agent an Indian phone number.
It provisions +91 numbers over an API, places and receives voice calls on them in twelve Indian languages, and runs the TRAI compliance every one of those calls is subject to — the calling windows, the Do-Not-Call checks, the consent ledger and the audit trail that proves you did it.
It is a developer product, not a hosted chatbot builder. You bring the conversation; Tone supplies the number, the carrier path, and the regulation around the call.
Three ways to use it
You do not pick one at signup. These are packaging, not account types — a single organization can run all three at once, because the choice lives on each phone number rather than on your account.
| Telephony | Compliance | The voice agent | Rate | |
|---|---|---|---|---|
| Full stack | Tone | Tone | Tone | ₹6.00/min + rental |
| Bring your own voice | Tone | Tone | You | ₹2.50/min + rental |
| Compliance only | You | Tone | You | per verdict |
- Full stack — you write a prompt, pick a voice, and Tone runs the whole call. Start here if you want a working call in five minutes.
- Bring your own voice stack — you already have an agent. Tone hands you the audio over a WebSocket and stays out of the conversation.
- Compliance as an API — you already have a carrier. Tone answers "may I legally dial this number right now?" and keeps the evidence that you asked.
Start here
Quickstart
Place a real call with a known outcome. Five minutes, no rupees, no paperwork.
Authentication
Keys, environments and scopes. The key prefix is the environment.
Test mode
Magic numbers that produce fixed outcomes, so CI can assert on them.
Errors
Every code the API returns, what causes it, and what to do about it.
What you should know before you build
/v1 is a promise, not a version number. Changes are additive only. New
endpoints, new optional request fields, new response fields and new enum members
can appear at any time and are not breaking. Nothing you receive today will be
removed, renamed or retyped. There is no plan for a /v2.
Treat every enum as open. Fields listing what exists today are telling you what exists today, not what can ever arrive. Handle an unrecognised value rather than throwing — that is the other half of the additive-only promise, and a client that throws turns our compatible change into your outage.
Branch on error.code, never on error.message. Codes are contract;
messages are written for humans and get reworded. See
Conventions for the envelope both share.
Test mode is free and complete. A tone_test_ key works from the moment you
sign up — before KYC, before a DLT registration, before you have put any money
in. It runs the same compliance gate, writes the same call records and sends the
same webhooks with the same signatures. Going live is a key swap.