Webhooks
Register an HTTPS endpoint and Aurtio posts you a signed JSON body on every event — so your systems react the moment a call ends or a lead lands.
Events
call.endedid, agent_id, room, direction, duration_sec, cost_inr, turns
lead.capturedid, name, phone, requirement, call_room
booking.createdid, name, when_text, purpose, call_room
call.summaryid, summary, disposition, extracted { … }
Delivery body
Every delivery has the same envelope — the event name plus its data:
{
"id": "<delivery id>",
"event": "call.ended",
"created_at": "…",
"data": { … }
}Verify the signature
Each request carries X-Aurtio-Signature: t=<unix>,v1=<hex>, where v1 = HMAC_SHA256(secret, "{t}.{raw_body}"). The signing secret (whsec_…) is shown once at registration. Reject the request if |now − t| > 300s.
import hmac, hashlib, time
def verify(secret, body, header):
p = dict(kv.split("=", 1) for kv in header.split(","))
if abs(time.time() - int(p["t"])) > 300:
return False
mac = hmac.new(secret.encode(), f"{p['t']}.{body}".encode(),
hashlib.sha256).hexdigest()
return hmac.compare_digest(mac, p["v1"])Example payloads
// call.ended
{"event":"call.ended","data":{"id":"<call>","agent_id":"<agent>","room":"call-…",
"direction":"inbound","duration_sec":42,"cost_inr":1.4,"turns":6}}
// lead.captured
{"event":"lead.captured","data":{"id":"<lead>","name":"Ravi","phone":"98765…",
"requirement":"dental appointment","call_room":"call-…"}}
// booking.created
{"event":"booking.created","data":{"id":"<booking>","name":"Ravi",
"when_text":"kal shaam 5 baje","purpose":"consultation","call_room":"call-…"}}
// call.summary
{"event":"call.summary","data":{"id":"<call>","summary":"…","disposition":"lead",
"extracted":{"name":"Ravi","phone":null,"appointment_time":"kal 5pm"}}}Delivery & retries
Deliveries retry with exponential backoff (30s · 4ⁿ, up to 5 attempts). Endpoints must be public HTTPS — private and internal addresses are rejected.