The outbound IVR API places a phone call that runs one of your published IVR flows. Your system sends the flow ID, the customer's number and variables such as an order ID. The flow speaks them, calls your API on keypresses, and posts a signed result back when the call ends.
₹20 Free Credit, No Card
₹1.50 per Minute
Visual Flow Builder
Build the flow once; start as many calls as you need
Use {{var.name}} in Say and Menu prompts for per-call details, and HTTP Request steps for your API.
In the IVR portal, then send it as X-API-Key or Authorization: Bearer.
Send flow_id, to, variables, a reference_id and a status_callback_url, with an Idempotency-Key header.
Do-not-call list, the 09:00 to 21:00 IST window, wallet balance and your concurrency limit.
A signed status callback arrives with status, duration, price, keys pressed, spoken answers and HTTP request results.
curl -X POST https://voice-api.edesy.in/v1/ivr/calls \
-H "X-API-Key: $EDESY_API_KEY" \
-H "Idempotency-Key: order-A123-confirm" \
-H "Content-Type: application/json" \
-d '{
"flow_id": "5b1c2f0e-...",
"to": "9800000000",
"variables": { "order_id": "A123", "name": "Ravi" },
"reference_id": "A123",
"status_callback_url": "https://shop.example.com/ivr/status"
}'
| Field | Notes |
|---|---|
flow_id |
Required. Must be published |
to |
Required. Indian number: 10 digits, with 91, or with +91 |
from |
Optional. One of your numbers; defaults to your first IVR number |
variables |
Optional. Up to 20 keys, used as {{var.<name>}} |
reference_id |
Optional. Your own ID, up to 128 characters, echoed back |
status_callback_url |
Optional, https:// only |
ring_timeout_sec |
Optional. 10 to 60, default 45 |
The response is 202 Accepted with a call_sid and status queued.
| Check | What happens |
|---|---|
| Do-not-call list | Refused with dnc_suppressed |
| Calling hours | Outside 09:00 to 21:00 IST, refused with outside_calling_hours |
| Wallet balance | Refused with insufficient_balance |
| Concurrency | 10 API calls in progress per workspace by default; more get concurrency_limit |
| Idempotency | The same key and body within 24 hours returns the first response and does not dial again |
The status callback event is ivr.call.completed, ivr.call.no-answer, ivr.call.busy, ivr.call.canceled or ivr.call.failed, signed with X-Edesy-Signature (sha256= HMAC of the timestamp, a dot and the body), with up to 5 delivery attempts in total. You can also fetch any call with GET /v1/ivr/calls/{call_sid} or list them with GET /v1/ivr/call-logs.
Start the Order confirmation (API + HTTP) template with variables: {"order_id": "A123"}. The customer hears "To confirm order A123, press 1. To cancel, press 2. To speak to an agent, press 3." Keys 1 and 2 call your confirm and cancel endpoints; the callback tells you which key was pressed.
Full field list, error codes and signature examples: IVR outbound call API reference.
Press 1 to confirm, 2 to cancel, with your API called on each key.
Speak the amount and due date, and post callback requests to your CRM.
Confirm or reschedule with a keypress before the visit.
Ask for a 1 to 5 rating, then capture "tell us why" with an Ask step.
Share your use case and volume. We reply within one working day with a setup plan and pricing.
Resources to help you evaluate and implement
Build a flow, create an API key in the IVR portal and place your first call. ₹20 free credit, no card.