POST /v1/ivr/calls

Outbound IVR API: Place Flow Calls From Your System

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

How an API call runs

Build the flow once; start as many calls as you need

  1. Step 1 of 5: Build and publish a flow

    Use {{var.name}} in Say and Menu prompts for per-call details, and HTTP Request steps for your API.

  2. Step 2 of 5: Create an API key

    In the IVR portal, then send it as X-API-Key or Authorization: Bearer.

  3. Step 3 of 5: POST the call

    Send flow_id, to, variables, a reference_id and a status_callback_url, with an Idempotency-Key header.

  4. Step 4 of 5: Checks run before dialling

    Do-not-call list, the 09:00 to 21:00 IST window, wallet balance and your concurrency limit.

  5. Step 5 of 5: Get the result

    A signed status callback arrives with status, duration, price, keys pressed, spoken answers and HTTP request results.

Request

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.

Guard rails

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

Result

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.

Example: order confirmation

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.

What people start with it

Tell us about your calls

Share your use case and volume. We reply within one working day with a setup plan and pricing.

Outbound IVR API: FAQ

Start IVR calls from your own system.

Build a flow, create an API key in the IVR portal and place your first call. ₹20 free credit, no card.