This reference covers the v2 webhook format (users registered after November 1st, 2024). For the full payload envelope and best practices, see Overview and Example Webhook Data - v2. For the legacy v1 format, see Example Webhook Data - v1.
type field on every webhook payload to determine which event occurred.
Text
text.incoming.sms
An incoming SMS message was received.
text.incoming.mms
An incoming MMS message with attachments was received.
text.delivery.confirmed
SMS/MMS delivery was confirmed by the carrier.
text.delivery.failed
SMS/MMS delivery failed or timed out.
text.cancelled
Fired when you cancel a queued SMS/MMS send (
POST /conversations/cancel/{msg_id}). Does not mean the message was unsent — an in-flight send may still go out.
iMessage
imessage.incoming
An incoming iMessage was received.
imessage.cancelled
Fired when you cancel a queued iMessage send (
POST /conversations/cancel/{msg_id}). Does not mean the message was unsent — an in-flight send may still go out.
email.incoming
An incoming email was received.
FaceTime
facetime.call.initiated
An outbound FaceTime Audio dial created the call.
data.status is queued. Posted to your facetime webhook URL, else catchall. data is the same call object as Get a call.
facetime.call.ringing
The outbound call is ringing, or an inbound call arrived.
data.status is ringing. Same envelope and call object as initiated: link is still null, participants is [], webrtc is present, duration is null.
facetime.call.answered
The call is connected.
data.status is in_progress. link is now the FaceTime join URL. participants is the remote party.
facetime.call.rejected
You rejected an inbound ringing call via
POST /{call_id}/reject. Same call object; status reflects the rejected call.
facetime.call.failed
Contiguity could not place the call.
data.status is failed.
facetime.call.ended
The call ended: you hung up, the recipient hung up, or FaceTime disconnected.
data.status is completed. webrtc is null. duration is seconds of connected time.
participants at hangup is the remaining roster, not everyone who was on the call. If the recipient already left, this is often just your FaceTime Audio line.
OTP
otp.reverse.verified
A user has verified their phone number using a Reverse OTP.
Numbers
numbers.substitution
When the requested number is unavailable, a random number is used instead.
