webhook_url when creating the session and Telnyx pushes session events to it. The destination must be a public HTTPS URL without embedded credentials and must not resolve to loopback, private, link-local, or otherwise reserved addresses; redirects are not followed. Each session returns a webhook_secret exactly once at creation — store it; it is not retrievable again.
Envelope and Events
Every delivery is an HTTPPOST with Content-Type: application/json, no authorization header, and one envelope shape — deduplicate on id:
Each event’s full payload schema lives in the Webhooks group of the API Reference. Individual
transcript.segment messages are never delivered over webhooks. Read segments via the transcript endpoint or the stream.
Verify Signatures
Each delivery is signed with anX-Meeting-Bot-Signature header:
. byte, and the exact raw request-body bytes, then hex-encode the result and compare it against v1. Do not parse and reserialize the JSON before verifying.
raw_body into a string (for example with an f-string) produces b'...' in the signed payload and the comparison always fails.
Use a constant-time comparison and reject deliveries whose timestamp is outside your accepted clock skew window.
Delivery and Retry
- Up to 5 delivery attempts. Non-2xx responses, redirects, network errors, and timeouts all consume an attempt.
- Retries back off: roughly a minute after the first failed attempt, doubling each retry (about
60s * 2^n). - Each attempt has a 10-second timeout, so respond with a 2xx promptly.
- Events are delivered with best effort and duplicates can occur — including when your endpoint processed an event but its response was lost. Deduplicate on the event
idand fall back to REST polling when guaranteed receipt matters.
Related
- Session Events — the full event history, and what to read when a delivery is missed
- Join a Meeting — set
webhook_urlwhen creating a session - Collect Results — read the finalized transcript and artifacts