message.sent
OTP first reaches sent, delivered, read, or played. data.status contains the actual reported status. Produced at most once per message.
Delivered as POST to your configured HTTPS endpoint with Content-Type: application/json. Examples are fictional; the zero digest illustrates syntax only. Verify the signature before parsing. Acknowledge with a small 2xx response within the 10-second overall timeout. Duplicates and out-of-order deliveries are possible; save the event id to avoid processing the same event twice.
Eight attempts total, with seven retry delays of 1 minute, 5 minutes, 15 minutes, 1 hour, 3 hours, 6 hours and 12 hours, each with +/-20% jitter. Three consecutive outcome deliveries that finish failed disable the endpoint. See webhook verification and recovery.
Responses
| Status | Meaning and codes |
|---|---|
| 2XX | Your receiver accepted and saved the event. Any completed 2xx response succeeds; return a small body promptly. |
| default | Non-2xx, redirects, timeouts and connection failures fail delivery. Outcome events are retried; ping is not. |
Your receiver chooses the response body. The API-key Problem Details contract does not apply to your receiver.
Headers and payload
User-Agent*stringWebhook sender identity.
Watification-Event-Id*stringSame UUID as envelope id. Use this event ID to avoid processing duplicates; it stays the same on retry and replay.
uuidWatification-Signature*stringt=<unix seconds>,v1=<lowercase hex HMAC-SHA256>. Sign timestamp + dot + unaltered raw JSON body bytes using the entire whsec_ secret string. Each attempt gets a fresh timestamp. Verify with a constant-time comparison; see webhook verification and recovery.
^t=[0-9]+,v1=[0-9a-f]{64}$Content-Length*stringRequest body length in UTF-8 bytes.
^[0-9]+$Watification-Event-Type*stringSame event type as envelope type.
application/json- body
id*stringEvent UUID; stable across retries and replay.
uuidtype*stringEvent type.
createdAt*stringEnvelope creation time, distinct from outcome occurredAt.
date-timedata*Your receiver accepted and saved the event. Any completed 2xx response succeeds; return a small body promptly.