The HTTP Request step calls your API in the middle of a call. Choose GET, POST, PUT, PATCH or DELETE, an https URL, headers and a body with tokens such as {{digits}}. Run it in the background with retries, or wait up to 5 seconds and branch on Success or Failure. Every request is signed.
₹20 Free Credit, No Card
₹1.50 per Minute
Visual Flow Builder
Usually placed right after a Menu branch, so each key calls a different endpoint
For example key 1 goes to an HTTP Request that confirms an order, key 2 to one that cancels it.
Tokens like {{var.order_id}}, {{digits}}, {{caller}} and {{answer.<key>}} fill in per call. Values are escaped for where they land.
Background: the call carries on and the request retries on failure. Wait for response: the caller waits and the flow branches.
Check X-Edesy-Signature, an HMAC-SHA256 of the timestamp and raw body, with the signing secret from your portal.
Every request is listed with its status. A failed background request can be retried from the portal.
| Setting | Options | Notes |
|---|---|---|
| Method | GET, POST, PUT, PATCH, DELETE | Default POST |
| URL | https:// only |
Tokens allowed in the path and query, never in the host |
| Headers | Any name and value | Values may use tokens. Host, Content-Length and X-Edesy-* are set by the platform |
| Content type | JSON, form (urlencoded), plain text | Default JSON. Put tokens inside JSON string values |
| Body | Template | For example {"order_id": "{{var.order_id}}", "digit": "{{digits}}"} |
| Mode | Background (async) or Wait for response (sync) | Default background |
| Timeout | Background 1 to 10 s per attempt; sync 0.5 to 5 s | Default 3 s |
| Max attempts | 1 to 5, background only | Default 3. Network errors, 5xx, 408 and 429 are retried with backoff |
| Success status codes | 2xx or a list such as 200,201,409, sync only |
Anything else, a timeout or a network error takes Failure |
| Token | Value |
|---|---|
{{var.<name>}} |
A variable passed to the outbound call API |
{{answer.<key>}} |
A spoken answer captured by an Ask step |
{{digits}}, {{menu_choice}} |
The key just pressed, and the menu label for it, such as "Support" |
{{caller}}, {{did}} |
The two numbers on the call |
{{call_sid}}, {{flow_id}}, {{reference_id}} |
Call identifiers |
{{time}}, {{time_iso}} |
Now, in IST (readable) or UTC |
X-Edesy-Signature (sha256=<hex>), X-Edesy-Timestamp, X-Edesy-Idempotency-Key (the same value for the same visit to a step, so you can drop duplicates), X-Edesy-Call-Sid and User-Agent: edesy-ivr/1.0.
import hmac, hashlib, time
def verify(headers, raw_body: bytes, secret: str) -> bool:
ts = headers["X-Edesy-Timestamp"]
expected = "sha256=" + hmac.new(secret.encode(), ts.encode() + b"." + raw_body, hashlib.sha256).hexdigest()
return abs(time.time() - int(ts)) < 300 and hmac.compare_digest(expected, headers.get("X-Edesy-Signature", ""))
This is the Order confirmation (API + HTTP) template:
https://api.example.com/orders/{{var.order_id}}/confirm, then Say "Thank you. Your order {{var.order_id}} is confirmed.".../cancel, then Say "Your order {{var.order_id}} has been cancelled."Switch the cancel request to Wait for response and you can add a Failure branch that says "Please try again later".
Confirm, cancel or flag an order when the customer presses a key.
Post the caller's number, menu choice and spoken answers as a new lead.
Mark an appointment confirmed or ask for a reschedule.
Open a ticket from a complaint line with the caller's choice attached.
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
Add an HTTP Request step, point it at your API and test it on a real call. ₹20 free credit, no card.