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.