Inbound email
Receive email on your verified domains — replies, support addresses, parse-and-process pipelines. Each message becomes an email.received webhook plus an API record.
1. Point MX at Sendibl
On a domain (or subdomain) covered by a verified domain, publish an MX record:
Type Host Value Priority MX acme.com inbound-smtp.us-west-2.amazonaws.com 10
An MX record decides where allmail for that exact host goes. Don't put it on a domain that already receives mail elsewhere (Google Workspace, Office 365) — use a subdomain like
reply.acme.com or inbound.acme.com instead. Subdomains of a verified domain route to your account automatically; no separate verification needed.2. Subscribe to email.received
Add the email.received event to a webhook. The payload carries the essentials; fetch the full message from the API when you need the body:
email.received payload
{
"type": "email.received",
"created_at": "2026-07-28T18:04:11.128Z",
"data": {
"inbound_id": "inb_...",
"from": "Ada Lovelace <ada@example.com>",
"to": ["support@reply.acme.com"],
"subject": "Need help with my order",
"spam_verdict": "PASS",
"attachments": [{"filename": "receipt.pdf", "content_type": "application/pdf", "size": 48211}]
}
}3. Read messages from the API
Fetch the full message
GET /inbound # list, newest first (q= subject search, limit/offset) GET /inbound/inb_... # full body: text, html, headers, verdicts
Both endpoints accept your API key. The full record includes the parsed text and html bodies, all headers, reply_to, and SES's spam / virus / SPF / DKIM / DMARC verdicts. Received mail also appears in the dashboard under Inbound.
Limits
- Messages over ~150 KB (including attachments) are bounced by the receiving infrastructure.
- Attachment metadata (filename, type, size) is stored; attachment content is not.
- Mail to a domain that isn't verified in any account is dropped.