Turn incoming email into webhooks
Point an MX record at Postscale. Inbound messages are delivered to your app as signed JSON webhooks with parsed headers, body, attachment metadata, download links, and sender metadata.
Parsed JSON payload
Headers, plain-text body, HTML body, and attachment metadata delivered as structured fields. No MIME parsing on your end.
Hosted attachments
Attachments are stored outside the webhook body and exposed through authenticated Postscale download URLs. No base64 bloat in retries.
Catch-all or per-address
Route every @yourdomain.com address to one endpoint, or define patterns like support-+ticket@… for routing inside your app.
HMAC-signed webhooks
Every delivery is signed with HMAC-SHA256. Verify authenticity in one line. Retries with exponential backoff for 4 attempts.
Reply detection
Built-in In-Reply-To / References threading. Know which outbound message a reply belongs to without writing your own heuristics.
EU/EEA-hosted primary service data
Primary inbound message service data is hosted in the EU/EEA. Limited routing and infrastructure metadata may be processed under appropriate transfer safeguards.
{
"email_id": "0c1f2a3b-...",
"to": "support@yourapp.com",
"from": "customer@example.com",
"subject": "Password reset not working",
"text": "Hi, I'm trying to reset my password...",
"html": "<p>Hi, I'm trying to reset my password...</p>",
"attachments": [
{
"id": "5b7d9c0e-...",
"filename": "screenshot.png",
"content_type": "image/png",
"size": 128432,
"url": "https://api.postscale.io/v1/inbound-emails/0c1f2a3b-.../attachments/5b7d9c0e-.../download"
}
],
"received_at": "2026-04-16T11:22:00Z"
}Frequently asked questions
How do I point my domain at Postscale?
Add an MX record pointing at mx.postscale.io with priority 10. We verify ownership via a TXT record. The full setup is four DNS records and takes about five minutes.
What happens to attachments?
Attachments are stored separately from the webhook body and returned as authenticated Postscale download URLs. Use your API credentials to fetch them, then copy them into your own storage if you need custom retention.
Can I filter inbound messages?
Yes. Define rules per domain: block senders, reject by subject pattern, auto-respond, or route to different endpoints. Rules run before the webhook fires.
What's the pricing model?
Accepted inbound messages count toward the same monthly email quota as outbound sends. Outbound usage is counted per accepted recipient; inbound usage is counted per accepted message.
Further reading
How to build a support inbox with an inbound email API
Step-by-step tutorial — MX setup, webhook signing, reply threading, and the edge cases that break production.
DMARC Reporting API
Close the loop: monitor authentication for the domain that receives your inbound mail.
Moving from SendGrid for inbound parsing
Replace Inbound Parse with shared-quota receiving, signed webhooks, and one dashboard for send and receive.
Mailjet Parse API vs Postscale inbound
Compare inbound parsing, aliases, rules, attachments, and masked-address workflows.
Replace SES receipt rules
Move from S3, SNS, and Lambda wiring to parsed inbound webhooks and stored messages.
Ready to build?
Free tier includes everything you need to evaluate. No credit card required.
Create a free account