# A Twilio Alternative for India Developers (2026): What Carries Over and What Doesn't

> An honest look at Edesy as a Twilio alternative for Indian voice apps: Twilio-shaped endpoints and callbacks, INR billing, Indian numbers with KYC, and the one big difference: VoiceML JSON, not TwiML.

Source: https://edesy.in/blog/twilio-alternative-for-india-developers-2026

**Edesy is a Twilio alternative built for Indian voice apps: the call API, Basic auth and status callbacks follow
Twilio's shape, billing is a prepaid INR wallet with GST invoices, and you buy Indian numbers self-serve after KYC.
The one big difference: your answer URL returns VoiceML JSON, not TwiML. Plan for that rewrite and most of the
rest carries over.**

> **Try the Voice API:** [Open the Edesy voice portal](https://voice-app.edesy.in/?utm_source=edesy.in&utm_medium=blog&utm_campaign=twilio-alternative-for-india-developers-2026). Buy a number after KYC and place your first call from the API console.

This post is for developers who already know Twilio and are building something that mostly calls or answers
Indian numbers. It sets out what is the same, what is different, and when staying on Twilio is the better call.

## What carries over from Twilio

| Twilio concept | Edesy equivalent | Notes |
|---|---|---|
| `POST /Accounts/{Sid}/Calls` | `POST /v1/Accounts/:sid/Calls` or `POST /v1/calls` | Same handler behind both paths |
| Basic auth `AccountSid:AuthToken` | Supported | Or `Authorization: Bearer <api key>` |
| `StatusCallback` | `status_callback` | Payload uses PascalCase: `CallSid`, `CallStatus`, `Duration` |
| Recordings under the account | `/v1/Accounts/:sid/Recordings` and `/v1/recordings` | Encrypted cloud storage, signed links |
| Modify / end a live call | `POST` or `DELETE /v1/calls/:sid` | Update or hang up mid-call |
| `MachineDetection` | not on single calls | Answering-machine detection is a campaign setting |
| ConversationRelay | Conversation Relay | Same protocol; a bot written for Twilio works unchanged |
| Media Streams | Media Streams | Different wire format (raw L16 PCM, not base64 mu-law) |
| TwiML | VoiceML (JSON) | Must be rewritten; see below |

Status callbacks also carry fields Twilio does not send by default: `SipResponseCode`, `HangupReason` and
`CallOutcome`. `CallOutcome` tells you whether the call ended at the person (busy, rejected, no answer), an
unreachable phone, an invalid number, the network, your account (for example, low balance) or the platform. That
makes retry logic simpler. See [call status callbacks explained](https://edesy.in/blog/call-status-callbacks-explained-2026).

## What is different

**VoiceML, not TwiML.** When a call connects, Edesy fetches your answer URL and expects JSON:

```json
{
  "instructions": [
    { "verb": "gather", "input": "dtmf", "num_digits": 1, "timeout": 5,
      "action": "https://your-app.example.com/menu",
      "nested": [
        { "verb": "say", "text": "Thanks for calling. Press 1 for sales, 2 for support." }
      ] },
    { "verb": "say", "text": "We did not get your choice. Goodbye." },
    { "verb": "hangup" }
  ]
}
```

The verb set is: say, play, gather (keypad digits), record, dial, stream, redirect, reject, hangup and
pause. If your TwiML uses those, the port is a mapping exercise. The [migration guide](https://edesy.in/blog/migrate-twilio-calls-api-to-edesy-2026)
has a verb-by-verb table.

**JSON request bodies.** Twilio's Calls API takes form-encoded parameters like `Url` and `StatusCallback`. Edesy
takes JSON with snake_case fields (`url`, `status_callback`, `timeout`, `custom_parameters`). The path and auth
can stay Twilio-shaped; the body changes.

**More ways to start a call.** Besides an answer URL, `POST /v1/calls` accepts plain `text` to speak, a WebSocket
`stream_url` for your own bot, inline VoiceML, or an application ID (a saved routing preset).

**No server SDKs, no SMS API.** You call REST over HTTPS. There are no Node or Python packages to install, and
there is no SMS product. For browser calling there is a JavaScript SDK (`@edesy/voice-sdk`), but that is a client
SDK, not a server one.

## The India-specific parts

- **Numbers:** mobile, 92-series, landline and toll-free Indian numbers, searched and bought in the portal after
  KYC (PAN and Aadhaar; review takes about 24 hours). No setup fee.
- **Billing:** a prepaid INR wallet topped up with Razorpay, real-time deduction, GST invoices, and GSTIN capture
  so you can claim input tax credit. No dollar card, no FX line on your statement.
- **Pulse:** 60 seconds, with unanswered calls free.
- **No minimum commitment.**

| Item | Edesy price (excl. 18% GST) |
|---|---|
| Voice API call minutes | Rs 0.50/min, 60 s pulse, unanswered free |
| Mobile or 92-series number | Rs 499/month |
| Landline number | Rs 449/month |
| Toll-free number | Rs 999/month |
| Number setup | Rs 0 |

We don't quote Twilio's India rates here because they change; check Twilio's current pricing page, or see our
[Twilio voice pricing guide](https://edesy.in/blog/twilio-voice-pricing-guide-2026) for context. Full Edesy rates are on
[Voice API pricing](https://edesy.in/voice-api/pricing).

## Bring your own AI stack

A lot of teams leaving Twilio are building AI voice agents. Edesy lets you point an Indian number at almost
anything: a webhook that returns VoiceML, a SIP URI (LiveKit Cloud, Vapi, Retell, Bolna or your own), a raw-audio
[Media Stream](https://edesy.in/voice-api/media-streams), a text-in/text-out [Conversation Relay](https://edesy.in/voice-api/conversation-relay)
bot, an IVR Studio flow, or a team's softphones. The full list of 11 inbound targets is on
[call routing](https://edesy.in/call-routing).

## When to stay on Twilio

Be honest with yourself about these:

1. **You need SMS, WhatsApp and voice from one API.** Edesy has no SMS API.
2. **Most of your calls are outside India.** Edesy is built around Indian numbers and INR billing.
3. **You rely on TwiML Studio flows or Twilio's server SDKs** and can't budget time to rewrite answer handlers.
4. **You use Twilio products beyond voice** (Verify, Conversations, Flex) that have no direct Edesy equivalent.

If voice to Indian numbers is the core of your product, the switch is usually worth testing. You can also do it
gradually: Edesy's BYOC recipes let you bring a Twilio Elastic SIP trunk, Telnyx, Vonage or Plivo as a carrier.

## How to evaluate it in an afternoon

1. Sign up on the [voice portal](https://voice-app.edesy.in/?utm_source=edesy.in&utm_medium=blog&utm_campaign=twilio-alternative-for-india-developers-2026) and complete KYC.
2. Create an API key, or copy your Account SID and Auth Token.
3. Place a test call with `text` only: `{"from": "...", "to": "...", "text": "Hello from Edesy"}`.
4. Point a `status_callback` at a request bin and look at the payload.
5. Port one TwiML answer handler to VoiceML and run it against a real number.
6. Check the debugger, the per-call event timeline (`GET /v1/calls/:sid/events`) and the webhook delivery log.

The [Voice API docs](https://edesy.in/docs/voice-api) cover authentication, the five ways to start a call, the VoiceML verb
reference and webhooks. The [Twilio alternative overview](https://edesy.in/twilio-alternative-india) and the
[Voice API hub](https://edesy.in/voice-api) summarise the product.

## Frequently Asked Questions

### Is Edesy a drop-in replacement for Twilio?

Not fully. The call endpoints, Basic auth with AccountSid:AuthToken, and the PascalCase status callback fields are Twilio-shaped, and a Twilio ConversationRelay bot works unchanged. But answer URLs must return VoiceML JSON, not TwiML, and request bodies are JSON with Edesy field names.

### Does Edesy parse TwiML?

No. When a call is answered, your answer URL must return VoiceML, a JSON list of instructions such as say, play, gather, dial and hangup. Most TwiML verbs have a direct VoiceML equivalent, so the port is mechanical, but it is a rewrite of your answer handlers.

### Does Edesy have Node or Python SDK packages like Twilio?

No server SDK packages today. You call the REST API over HTTPS with any HTTP client. The API console in the portal generates cURL for each request, which is easy to translate into fetch, axios or requests.

### How much does an Edesy voice call cost?

Rs 0.50 per minute for Voice API calls, billed on a 60-second pulse, with unanswered calls free. An Indian mobile or 92-series number is Rs 499 per month and a landline Rs 449 per month. Prices exclude 18% GST and are paid from a prepaid INR wallet.

### Can I keep Twilio for SMS and use Edesy for voice?

Yes. Edesy does not offer an SMS API, so teams that need SMS often keep it with their current provider and move voice. The two do not depend on each other.

### Can I use Twilio as a carrier with Edesy?

Yes. Edesy has bring-your-own-carrier (BYOC) recipes for Twilio Elastic SIP, Telnyx, Vonage and Plivo, so you can route some traffic through an existing carrier account while using Edesy features.
