Inbound email API for receiving email as webhooks

Build support inboxes and reply handlers with parsed JSON, message headers, and attachment downloads. Connect a receiving domain or subdomain, configure a recipient route, and receive signed webhooks with EU/EEA-hosted primary service data.

Everything the product needs. Nothing it does not.

A focused API surface with production controls, predictable resources, and the operational visibility to run email confidently.

01

Parsed JSON payload

Headers, plain-text body, HTML body, and attachment metadata delivered as structured fields. No MIME parsing on your end.

02

Hosted attachments

Attachments are stored outside the webhook body and exposed through authenticated Postscale download URLs. No base64 bloat in retries.

03

Catch-all or per-address

Configure exact or wildcard aliases for your receiving domain. Catch-all and domain-wide rules are available on eligible plans.

04

HMAC-signed webhooks

Verify the request signature before processing a message. Failed deliveries retry with exponential backoff; make your handler idempotent.

05

Reply threading headers

Use parsed In-Reply-To and References headers to match a reply to an existing conversation in your application.

06

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.

Start with one request.

The public API uses explicit resources and familiar JSON. Move from a first request to production without changing integration models.

See inbound docs
Webhook payload your endpoint receives ready
{
  "email_id": "0c1f2a3b-...",
  "event": "email.received",
  "timestamp": "2026-10-21T11:22:00Z",
  "message_id": "<reply-123@example.com>",
  "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>",
  "headers": [
    { "name": "In-Reply-To", "value": "<ticket-123@yourapp.com>" }
  ],
  "attachments": [
    {
      "id": "5b7d9c0e-...",
      "filename": "screenshot.png",
      "content_type": "image/png",
      "size": 128432,
      "url": "https://api.postscale.io/v1/inbound-emails/0c1f2a3b-.../attachments/5b7d9c0e-.../download"
    }
  ]
}

FAQ

What is an inbound email API?

An inbound email API receives email for your application, parses the message, and exposes its content through webhooks or API calls. Postscale sends an email.received webhook with message identifiers, bodies, headers, and attachment metadata so your application can create a ticket or process a reply.

How do I point my domain at Postscale?

Add and verify an inbound domain or subdomain, then configure its MX records using the dashboard instructions. Create a webhook subscribed to email.received and an alias or inbound rule that routes recipients to it. A webhook endpoint alone does not make an address receive mail.

Can I keep Google Workspace or Microsoft 365 for my main inbox?

Yes. Use a separate receiving subdomain such as inbound.example.com for Postscale and keep your root-domain MX records with your mailbox provider. Change root-domain MX only if you intend to move receiving for that domain.

Can I test inbound email on the Free plan?

Free supports one inbound subdomain with two aliases or routes, within its monthly quota. Root-domain inbound, catch-all, and combined sending and receiving domains require a paid plan or manual review. Check the current pricing and inbound documentation for limits.

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.

Build the email workflow your product needs.

The free tier includes everything required to evaluate the API. No credit card required.

Create a free account