Inbound email
Receive email at your own domain or a Buzzmark address, and have it POSTed to your app as clean JSON - or forwarded straight to a mailbox.
Every hive can receive email as well as send it. Buzzmark accepts the message, parses it, stores it in the hive's Inbound log, and then either POSTs it to your inbound webhook as JSON or forwards it to an external mailbox. There are two ways to get mail in:
- The hive's Buzzmark address -
{hash}@in.buzzmarkapp.com, works immediately, no DNS required. - Your own domain - point the domain's MX at Buzzmark and receive at
support@yourdomain.com.
Option 1: the hive's Buzzmark address
Each hive has a unique inbound address shown on its Inbound page in the dashboard, of the form
{hash}@in.buzzmarkapp.com. Anything sent (or forwarded by another mail provider) to that address is
accepted and delivered to the hive's inbound webhook. The long random hash is the credential - treat the
address itself as a secret.
This is the quickest way to test inbound, and it pairs well with the forwarding rules most mailbox providers offer: keep receiving at your existing address and forward a copy to the hive address for processing.
Option 2: receive on your own domain
To accept mail addressed directly to your domain (e.g. support@yourdomain.com):
- Verify the domain. Add it under Domains and complete DKIM verification - inbound can only be enabled on a domain whose ownership is confirmed.
- Point the MX record at Buzzmark:
| Type | Host | Value | Priority |
|---|---|---|---|
MX | yourdomain.com (or the subdomain you're receiving on) | mxin.buzzmarkapp.com | 10 |
Careful: a domain has one set of MX records. If yourdomain.com already receives
normal mailbox mail (Google Workspace, Fastmail…), don't replace those records - enable inbound on a subdomain
like in.yourdomain.com instead, or use per-address forwarding so human
mail still reaches an inbox.
- Choose a delivery hive. On the domain's page, pick the hive whose inbound webhook (and Inbound log) receives the mail.
- Choose which addresses to accept:
- Catch-all - every address at the domain.
- Only specific addresses - list the local parts you want (e.g.
support,billing); everything else is rejected at SMTP time with a550, so senders get a normal bounce rather than silence.
Delivering to your webhook
Set the inbound webhook URL on the hive's Inbound page. Each received message is POSTed to it
with an X-Buzzmark-Inbound-Hash header carrying the hive's inbound hash - check it to make sure
the request really came from Buzzmark. Respond with any 2xx to acknowledge; anything else (or a
timeout) is retried with backoff, up to 5 attempts over about 20 minutes. Every message and its
delivery status (received, forwarded, failed, no webhook) is visible in the
hive's Inbound log, where the full parsed message is kept even if your endpoint was down.
The URL must be publicly reachable - endpoints resolving to private or internal addresses are refused.
Payload formats
Migrating from another provider? Pick the payload format per hive and point your existing handler at Buzzmark unchanged:
- Buzzmark (default) - our native PascalCase JSON, shown below. Recommended for new integrations.
- Postmark - matches Postmark's inbound webhook JSON (
FromFull,ToFull,Headers…). - SendGrid - matches SendGrid's Inbound Parse form fields (
from,to,subject,text,html,envelope…), posted as a form, not JSON. - Mailgun - matches Mailgun's inbound route fields (
sender,recipient,body-plain,body-html,message-headers…).
The native Buzzmark payload:
{
"MessageID": "f5ab446c-...",
"From": "sender@world.com",
"FromName": "Sender",
"To": "support@yourdomain.com",
"Subject": "Help please",
"HtmlBody": "<p>…</p>",
"TextBody": "…",
"Headers": [{ "Name": "Message-Id", "Value": "..." }],
"Attachments": [{ "Name": "file.pdf", "ContentType": "application/pdf", "ContentLength": 1234 }]
}
Forwarding to another mailbox
Not every address needs code behind it. On a domain with inbound enabled, you can map specific addresses to an
external inbox - sales@yourdomain.com → you@gmail.com - and Buzzmark relays the mail there as
a real email. Adding a forward is enough to start receiving for that address, even in
specific addresses mode.
A few things to know about forwarded mail:
- It's re-sent from the receiving address on your domain (which Buzzmark DKIM-signs), so it passes SPF/DKIM/DMARC at the destination instead of looking spoofed. The original sender's name is kept as the display name, and Reply-To points back at them - replying just works.
- Forwarded messages skip the inbound webhook - a given address either forwards or webhooks, not both.
- Attachments are not included in the forwarded copy; the message still appears in the hive's Inbound log.
- The copy carries
Auto-Submitted: auto-forwardedso auto-responders don't loop, plus anX-Buzzmark-Forwarded-Forheader naming the original recipient.
Limits
Inbound messages count toward the same monthly plan allowance as outbound sends. On a free plan, receiving pauses once the allowance is used and resumes next cycle; paid plans bill overage instead.
Next
- Webhooks - delivery, bounce, open and click events for outbound mail.
- API reference - send mail and read your message log.