---
title: "Inbound email"
description: "Point MX at Unitpost and turn any address on your verified domain into a structured email.received webhook — parse, thread, and reply on the same pipeline you already send with."
url: https://www.unitpost.com/inbound
section: "Marketing"
updated: 2026-09-04
---
# Inbound email

> Point MX at Unitpost and turn any address on your verified domain into a structured email.received webhook — parse, thread, and reply on the same pipeline you already send with.

## Highlights

- Included on every plan, including free
- Receive on your verified domain
- Structured JSON to your webhook
- Attachments available via authenticated URLs
- Same auth and dashboard as outbound

## Links

- [Inbound guide](https://www.unitpost.com/docs/inbound)

## FAQ

### How do I receive email on my own domain with Unitpost?

Turn on receiving for a domain you already send from, add the one MX record we show you, and subscribe a webhook endpoint to the email.received event. Once the MX verifies, every message addressed to that domain is parsed and POSTed to your endpoint. There's no new domain and no separate account — receiving reuses the domain authentication you already verified for sending.

### Does the inbound MX record break my existing email?

It can, which is why we check first. Our MX must be the lowest-priority value present or mail won't route to us — so if your root domain already has MX records for Google Workspace or Microsoft 365, pointing it at us would stop mail reaching those inboxes. We detect the conflict, warn you before you proceed, and recommend using a subdomain like inbound.yourdomain instead.

### Which addresses receive mail — do I configure each one?

No per-address setup. Receiving is catch-all: any address at the enabled domain lands, and you route on the to field in your own handler. So support@, billing@, and reply+abc123@ all arrive without provisioning anything, which is what makes per-user or per-thread reply addresses practical.

### How do I get the message body and attachments?

The email.received webhook carries metadata only — sender, recipients, subject, message_id, and attachment descriptors — so payloads stay small. Fetch the parsed message with GET /api/v1/email/received/{id}, which inlines text and HTML when they're small, then call GET /api/v1/email/received/{id}/attachments/{attachmentId} for a signed download URL that expires in about five minutes. Both need the emails:read scope.

### Are inbound messages checked for spam and viruses?

Yes. Every message carries spam, virus, SPF, DKIM, and DMARC verdicts on the event and the stored record, so your handler decides how much to trust a sender. Confirmed viruses are rejected at ingest rather than handed to you. Messages over 25 MB in total, including attachments, are also rejected at ingest and the sender gets a failure notice.

### Can I reply in-thread to an email I received?

Yes. Pass the received email's id as in_reply_to on POST /api/v1/email and we populate the In-Reply-To and References headers from the stored Message-ID chain, and prefix the subject with Re: if it isn't already — so mail clients thread the conversation. Any In-Reply-To or References header you set explicitly still wins.

### Is inbound email included on the free plan?

Yes. Receiving is included on every plan, including free — it is not a paid add-on. You still need a verified domain and a webhook subscribed to email.received. Received messages don't draw the paid sending allowance; on the free plan they share the monthly email quota with outbound sends.
