Call routing

Route a Phone Number to Anything

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

The 11 inbound targets

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.

Route a number in four steps

Buy once, then point it wherever the call should go

  1. Step 1 of 4: Verify your business

    Submit KYC with PAN and Aadhaar for your business type. Review takes about 24 hours.

  2. Step 2 of 4: Buy a number

    Search by region, type or digits: mobile, landline, toll-free or 92-series, paid from your INR wallet.

  3. Step 3 of 4: Choose where calls go

    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.

  4. Step 4 of 4: Test it

    Place a test call from the dashboard, then check the number's health, webhook logs and the call's event timeline.

Which target should I pick?

Match the target to who, or what, should answer

Switch targets from the API

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.

On every number, whatever the target

Per-number controls that sit alongside routing

Recording toggle

Switch call recording on or off per number. Recordings are kept in encrypted cloud storage with signed links.

Blocked callers

Add callers to the inbound blocklist so they never reach your target.

Health and test call

Per-number health, a test-call button and webhook logs show whether routing is working.

Signed, retried webhooks

Events are HMAC-SHA256 signed and retried with backoff, with a delivery log and replay.

Outbound caller ID

Set outbound_caller_id on the number to control the caller ID used for calls placed from it.

Auto-renew

Each number shows a paid-until date and renews automatically from your wallet, or can be released.

Call routing: FAQ

Not sure which target fits?

Tell us who or what should answer your calls and how many numbers you need. We'll suggest a setup.

One number. Eleven places to send the call.

Buy an Indian number after KYC and point it at your app, your bot, your IVR or your team.