Every Edesy number has a "When a call comes in" setting with 11 targets: a webhook returning VoiceML, a SIP URI, a raw audio stream, a Conversation Relay bot, an Edesy AI agent, your SIP trunk, browser softphones, an IVR flow, an application preset, a missed-call line or a forwarding rule. Switch in the dashboard or by API.
11
Inbound targets per number
1 call
To switch by API
Rs 499
Mobile number / month
Rs 0
Setup fee
Indian numbers after KYC
Switch any time
Signed webhooks
Per-number recording toggle
Each number has exactly one target at a time. Change it whenever you like; the next call follows the new setting.
| # | Target | What happens to the call | Use it when | API value (PATCH .../routing) |
Billed as |
|---|---|---|---|---|---|
| 1 | Webhook URL | Edesy fetches your URL, which returns VoiceML (JSON) instructions | Your app decides per call: say, gather, record, dial, stream | webhook |
Rs 0.50/min |
| 2 | SIP URI or saved SIP destination | The call is sent over SIP, with optional digest credentials and custom headers | Your AI platform or PBX takes SIP: LiveKit, Vapi, Bolna, Retell or any SIP endpoint | sip |
Rs 0.50/min |
| 3 | Media stream | Raw L16 audio (8 or 16 kHz) goes to your WebSocket, both ways | You run your own speech pipeline, for example Pipecat | stream |
Rs 0.50/min |
| 4 | Conversation Relay | Your bot exchanges text over a WebSocket; Edesy runs speech | You have an LLM but no audio pipeline | relay |
Ask for the relay rate |
| 5 | Edesy AI voice agent | An agent built on voice-agent.edesy.in answers | You want a hosted AI agent without writing a bot | voiceagent |
See AI voice agent pricing |
| 6 | Your SIP trunk | The call follows your termination trunk's own inbound target | Numbers belong to a trunk that already routes to your platform | trunk |
Rs 0.50/min |
| 7 | Browser/app softphones | Available agents' browser softphones ring | A team answers in the browser or the agent desktop | Dashboard | Rs 1.50/min |
| 8 | IVR Studio flow | A published flow runs: menus, prompts, voicemail, transfer | Callers pick a department or hear self-service options | ivr |
Rs 1.50/min |
| 9 | Application preset | Routing comes from a reusable application attached to many numbers | Many numbers should behave the same and change together | application |
Per the application's target |
| 10 | Missed call | The call is declined before answer and a call.missed webhook fires |
Missed-call campaigns, opt-ins and callback requests | missed_call |
Rs 0.30 per missed call |
| 11 | Call forwarding rule | The call rings your team's phones, all at once or one by one | Your team answers on their own mobiles | Forwarding portal | Rs 1.00/min |
All numbers also carry rental: mobile or 92-series Rs 499/mo, landline Rs 449/mo, toll-free Rs 999/mo, Rs 0 setup. Prices exclude 18% GST.
Buy once, then point it wherever the call should go
Submit KYC with PAN and Aadhaar for your business type. Review takes about 24 hours.
Search by region, type or digits: mobile, landline, toll-free or 92-series, paid from your INR wallet.
On the number's page, pick a target under When a call comes in, or set it with PUT /v1/phone-numbers/{id}/inbound or PATCH /v1/phone-numbers/{id}/routing.
Place a test call from the dashboard, then check the number's health, webhook logs and the call's event timeline.
Match the target to who, or what, should answer
Webhook URL. Return VoiceML to say, play, gather, record, dial, stream or redirect, per call.
SIP URI. Saved SIP destinations keep LiveKit, Vapi, Retell or Bolna endpoints in an address book with a test-call button.
Media stream. Raw L16 PCM in and out of your WebSocket.
Conversation Relay. Text in, text out; Edesy runs the speech side.
IVR Studio flow. Drag-and-drop menus, prompts in Hindi or English, voicemail and transfer.
Forwarding rule. Ring all at once or one by one, with sticky agent and call screening.
Missed call. Declined before answer so the caller pays nothing, then a signed call.missed webhook.
Browser softphones. Available agents' softphones ring; the contact center adds queues and skills.
Application preset. Attach one application to many numbers and change them all together.
Two endpoints change a number's target. Both accept Authorization: Bearer sk_... or Basic auth with your Account SID and Auth Token.
PUT /v1/phone-numbers/{id}/inbound binds the four API-first targets in one call and provisions the telephony behind them: webhook, media_stream, conversation_relay and voice_agent. DELETE on the same path detaches it.
curl -X PUT https://voice-api.edesy.in/v1/phone-numbers/$PHONE_NUMBER_ID/inbound \
-H "Authorization: Bearer $EDESY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target": "media_stream", "stream_url": "wss://bot.example.com/ws", "sample_rate": 16000}'
PATCH /v1/phone-numbers/{id}/routing sets any of webhook, sip, stream, relay, trunk, voiceagent, application, ivr or missed_call, with the fields that target needs, plus per-number options such as recording_enabled, outbound_caller_id and friendly_name.
# Send calls to an AI platform over SIP, with digest auth and a custom header
curl -X PATCH https://voice-api.edesy.in/v1/phone-numbers/$PHONE_NUMBER_ID/routing \
-H "Authorization: Bearer $EDESY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"inbound_target_type": "sip",
"inbound_sip_uri": "sip:[email protected]",
"inbound_sip_username": "edesy",
"inbound_sip_password": "********",
"inbound_sip_headers": {"X-Api-Secret": "********"}
}'
# Turn the same number into a missed-call line
curl -X PATCH https://voice-api.edesy.in/v1/phone-numbers/$PHONE_NUMBER_ID/routing \
-H "Authorization: Bearer $EDESY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"inbound_target_type": "missed_call"}'
| Target | Fields |
|---|---|
webhook |
inbound_webhook_url, optional inbound_webhook_method (GET or POST) |
sip |
inbound_sip_uri, optional inbound_sip_username, inbound_sip_password, inbound_sip_headers |
stream |
inbound_stream_url, optional inbound_stream_sample_rate (8000 or 16000) |
relay |
inbound_relay_url, optional inbound_relay_config |
trunk |
inbound_trunk_id |
ivr |
ivr_flow_id of a published flow |
application |
application_id |
missed_call, voiceagent |
none |
SIP passwords and custom headers are stored encrypted. Sending inbound_sip_headers replaces the whole set; an empty object clears it. Softphones and forwarding rules are set from the dashboard and the forwarding portal. See inbound routing for every field.
Per-number controls that sit alongside routing
Switch call recording on or off per number. Recordings are kept in encrypted cloud storage with signed links.
Add callers to the inbound blocklist so they never reach your target.
Per-number health, a test-call button and webhook logs show whether routing is working.
Events are HMAC-SHA256 signed and retried with backoff, with a delivery log and replay.
Set outbound_caller_id on the number to control the caller ID used for calls placed from it.
Each number shows a paid-until date and renews automatically from your wallet, or can be released.
Explore more comparisons, alternatives, and resources
Tell us who or what should answer your calls and how many numbers you need. We'll suggest a setup.
Buy an Indian number after KYC and point it at your app, your bot, your IVR or your team.