Delivery
The request we send
POST /your/endpoint HTTP/1.1
Content-Type: application/json
{ … the event body … }
| Method | POST, always |
| Content-Type | application/json |
| Timeout | 30 seconds, including connection setup and TLS |
| Retries | None |
| Signature | None — see Verifying |
| Ordering | Not guaranteed |
| Redirects | Followed |
| TLS | https recommended; http is accepted |
Your response body is ignored.
No retry
If your endpoint is down, unreachable, or slower than 30 seconds when an event fires, the event is lost permanently. There is no retry, no dead-letter queue, and no way to ask for it again.
Backfill from the REST API for anything you cannot lose:
| Event | Backfill with |
|---|---|
AccountSMS | SMS history |
AccountEndedCalls, UserEndedCalls | Call history / reports |
AccountAITranscription | Transcription reports |
AccountRealTimeCalls | Nothing. Live state is not recoverable after the fact. |
No ordering, no event id
A …RealTimeCalls event can arrive after the …EndedCalls event for the same
call. Sort on the timestamps in the payload, not arrival order.
There is no delivery id to deduplicate on. Build a key from the payload —
callId + status for calls, id for SMS.
Testing a receiver
There is no test-event button and no sandbox generator. Point a subscription at a
capture service (webhook.site, ngrok to your laptop), then trigger the event for
real — send yourself a text, make a call — and read what arrives.