Signed API calls from inside a call

IVR HTTP Request Node: Call Your API on Any Step

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

How the HTTP Request step works

Usually placed right after a Menu branch, so each key calls a different endpoint

  1. Step 1 of 5: Add the step after a branch

    For example key 1 goes to an HTTP Request that confirms an order, key 2 to one that cancels it.

  2. Step 2 of 5: Set method, URL and body

    Tokens like {{var.order_id}}, {{digits}}, {{caller}} and {{answer.<key>}} fill in per call. Values are escaped for where they land.

  3. Step 3 of 5: Pick a mode

    Background: the call carries on and the request retries on failure. Wait for response: the caller waits and the flow branches.

  4. Step 4 of 5: Verify on your server

    Check X-Edesy-Signature, an HMAC-SHA256 of the timestamp and raw body, with the signing secret from your portal.

  5. Step 5 of 5: Watch the HTTP logs

    Every request is listed with its status. A failed background request can be retried from the portal.

HTTP Request settings

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

Tokens you can use

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

Headers on every request

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", ""))

Example flow: order confirmation by keypress

This is the Order confirmation (API + HTTP) template:

  1. Play your recorded message, then Menu: "To confirm order {{var.order_id}}, press 1. To cancel, press 2. To speak to an agent, press 3."
  2. Key 1: HTTP Request POST https://api.example.com/orders/{{var.order_id}}/confirm, then Say "Thank you. Your order {{var.order_id}} is confirmed."
  3. Key 2: HTTP Request POST .../cancel, then Say "Your order {{var.order_id}} has been cancelled."
  4. Key 3: Transfer to an agent. Timeout: Hangup.

Switch the cancel request to Wait for response and you can add a Failure branch that says "Please try again later".

Limits and safety

  • Up to 20 requests a second per workspace; rendered body up to 16 KB; up to 64 KB of the response is read.
  • At most 5 sync requests, and 4 seconds in total, between two caller interactions.
  • Redirects are not followed, requests to private or internal addresses are refused, and secret-looking header values are masked in logs.
  • The signing secret can be rotated in the portal.

What teams connect it to

Tell us about your calls

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

HTTP Request Node: FAQ

Connect every keypress to your systems.

Add an HTTP Request step, point it at your API and test it on a real call. ₹20 free credit, no card.