Webhooks
Receive inbound email events at your endpoint the moment they happen. Every delivery is signed, retried on failure, and replayable from the dashboard.
Events
Subscribe to the events you care about when you create a webhook endpoint.
| Event | Fires when |
|---|---|
message.received | A new inbound message is parsed and ready. |
message.routed | A routing rule matched and acted on a message. |
delivery.failed | A forward or webhook delivery exhausted its retries. |
Payload
Each delivery is a JSON POST. The body is stable and versioned, so you can parse it with confidence.
{ "event": "message.received", "domain": "acme.com", "to": "invoices@acme.com", "from": "vendor@example.com", "subject": "Invoice #1042 attached", "routing_rule": "invoices-to-erp", "received_at": "2026-05-10T14:22:31Z" }
Signing
Every request carries an InletOps-Signature header computed over the raw body with your endpoint's signing secret. Verify it before trusting the payload, and reject anything that does not match.
InletOps-Signature: t=1715351, v1=4f9a…c2
Retries & replay
If your endpoint returns a non-2xx status or times out, InletOps retries with exponential backoff over several hours. Because delivery is at-least-once, make your handler idempotent by keying on the event id.
- Automatic retries with backoff and jitter.
- One-click replay of any past event from the dashboard.
- Searchable delivery logs with status and response codes.