POST request with a JSON body and retries until your endpoint confirms it.
Endpoints
Manage endpoints in the dashboard under Webhooks. An endpoint URL must:- use
httpson port 443 with a valid, publicly trusted certificate, - resolve to a public IP address,
- not contain a user name, password, query string or fragment.
Deliveries
For every message, recipient and endpoint there is exactly one delivery with a stabledelivery_id. A message with two recipients that both match a webhook route therefore results in two deliveries, each naming its own recipient.
Each delivery can have several attempts. All attempts and manual retries of a delivery keep the same delivery_id and the same payload version, but get a new timestamp, new signature and new download links.
Request
Verify the signature before you process the request.
Payload
The body depends on the payload version of the endpoint:
Read
schema_version in the body to tell the formats apart. A change of the payload version applies to messages received afterwards.
Responding
Answer with any2xx status after you have stored the delivery durably; see Process webhooks reliably. The response body is ignored.
Every other outcome is a failed attempt and is retried:
- any status outside
2xx, including redirects (3xx) and4xx, - a connection that takes longer than 10 seconds to establish,
- an attempt that takes longer than 120 seconds in total,
- network and TLS errors.
4xx does not disable your endpoint.
Automatic retries
Each delay is extended by a random 0 to 20 %. With
429 or 503, Talario respects a Retry-After header (seconds or HTTP date) of up to 3 hours.
Automatic retries end 24 hours after the message was received. The delivery is then failed; the message stays available until expires_at.
Manual retries
You can request one more attempt of afailed or cancelled delivery until the message expires: in the dashboard under Inbound, or with the API and a key that may Retry webhooks:
202 Accepted; the mail server makes the attempt shortly afterwards. The Idempotency-Key header is required (1 to 255 visible ASCII characters, for example a UUID). Repeating a request with the same key returns the same answer with the header Idempotent-Replayed: true.
A manual retry does not start a new 24-hour period of automatic retries. A delivery that your endpoint already confirmed cannot be retried (409 delivery_not_retryable): download the message again instead.
Delivery guarantees
Delivery is at least once. A lost response, a timeout after your endpoint stored the delivery or a manual retry can deliver the same delivery again. Your endpoint must recognize repeated deliveries bydelivery_id; see deduplication.
Deliveries can arrive in any order, and several can arrive at the same time.
Delivery state
The API shows the state of each delivery inGET /receiving/messages/{id}: