Why Route Postmark Emails to a Webhook?
Postmark is a premium transactional email service known for fast delivery and high inbox placement rates, widely used by SaaS applications. While Postmark is a capable email platform, its native tooling for programmatic automation was not built for developers who need structured, reliable data delivery to backend systems.
The native approach — Postmark Inbound Processing — introduces significant operational overhead. You need to manage credentials, poll or maintain persistent connections, and write custom parsing logic for every message field you care about. When your team is moving fast, that friction adds up to hours of maintenance per integration.
JsonHook eliminates that overhead by accepting inbound mail on your behalf and immediately firing a structured JSON payload to any HTTPS endpoint you specify. The email is parsed, attachments are base64-encoded, and headers are normalised — so your webhook handler can focus entirely on business logic rather than MIME parsing.
Below are the core benefits of routing your Postmark messages through JsonHook instead of relying on the native alternative:
- Limitation avoided: Postmark inbound processing delivers messages to a dedicated inbound address on the Postmark domain — you cannot use your own custom domain for inbound without additional DNS setup.
- Limitation avoided: Postmark's inbound webhook format differs from its outbound webhook format, requiring separate parsing logic for inbound vs. outbound events.
- Limitation avoided: Postmark does not provide retry logic for failed inbound webhook deliveries — if your endpoint is unreachable, the message is not redelivered.
- Zero-polling architecture: JsonHook pushes to your endpoint the moment mail arrives — no long-running background jobs needed.
- Automatic attachment handling: PDFs, images, and other file types are extracted, base64-encoded, and included in the JSON payload with their original MIME type.
- Retry with exponential back-off: If your endpoint is temporarily unavailable, JsonHook retries automatically — something the Postmark Inbound Processing does not do natively.
- Webhook signatures for security: Every delivery includes an HMAC-SHA256 signature header so you can verify the payload originated from JsonHook.
Whether you are building a support-ticket ingestion pipeline, a lead-capture workflow, or an automated document processor, JsonHook gives you a consistent, typed interface to Postmark messages without the fragility of raw SMTP or polling-based API integrations.
How to Forward Postmark to JsonHook
Getting Postmark emails delivered to your webhook takes about five minutes. The process has two parts: creating a JsonHook address via the API, and configuring Postmark to forward a copy of each incoming message to that address.
- Log in to your Postmark account and open the Servers section. Select the server you want to configure inbound processing for.
- Click Settings › Inbound and note the inbound email address assigned to your server (e.g.
[email protected]). - Instead of using Postmark's inbound processing directly, configure your application's reply-to header to use your JsonHook inbound address so replies bypass Postmark entirely.
- Alternatively, set up a Postmark inbound rule that forwards all messages matching your criteria to your JsonHook address for consistent JSON delivery regardless of your sending path.
Once forwarding is active, every email that arrives in your Postmark inbox (or matches your filter) will be relayed to your JsonHook address, parsed, and delivered to your endpoint as a JSON payload within seconds.
You can create your JsonHook inbound address with a single curl command. Replace YOUR_API_KEY with the key from your dashboard and set webhookUrl to your endpoint:
curl -X POST https://jsonhook.com/api/addresses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "Postmark inbound",
"webhookUrl": "https://your-app.example.com/webhooks/email",
"secret": "a-random-signing-secret"
}'
The response includes your unique @in.jsonhook.com address. Copy that address and paste it into the forwarding field in your Postmark settings. That is all the infrastructure you need to stand up.
Start Receiving Postmark Webhooks in 5 Minutes
Free tier: 100 emails/month, 1 address. No credit card required.
Get Free API KeyPostmark vs Postmark Inbound Processing
When developers first explore email-to-webhook automation they typically discover Postmark Inbound Processing — the official programmatic route provided by ActiveCampaign (Postmark). The table below shows how it compares to using JsonHook as an intermediary.
| Feature | Postmark Native (Postmark Inbound Processing) | JsonHook |
|---|---|---|
| Structured JSON payload | ✗ | ✓ |
| Attachment parsing | ✗ | ✓ |
| Retry logic | ✗ | ✓ |
| Webhook signatures | ✗ | ✓ |
| Setup time | Hours to days | Under 5 minutes |
The native approach through Postmark Inbound Processing requires you to set up OAuth credentials or API keys, maintain a long-running listener or polling job, write your own MIME parser, and implement your own retry queue. Any one of those steps can become a reliability bottleneck in production.
JsonHook handles all of that infrastructure on your behalf. You get a single HTTPS webhook call with a predictable JSON schema every time a Postmark email arrives — no polling, no credential rotation, no MIME parsing, and no bespoke retry code to maintain.
JSON Payload Example
When a Postmark email is forwarded to your JsonHook address and delivered to your endpoint, the request body looks like the following. All fields are consistently present; optional fields such as htmlBody and attachments are included when the source message contains them.
{
"id": "msg_01j8xkr4p2vn3q7w",
"receivedAt": "2026-03-15T14:32:07.412Z",
"from": {
"name": "Alice Smith",
"address": "[email protected]"
},
"to": [
{
"name": "",
"address": "[email protected]"
}
],
"subject": "Your Postmark message subject here",
"textBody": "Plain-text content of the email body.",
"htmlBody": "<div>HTML version of the email body.</div>",
"headers": {
"message-id": "<[email protected]>",
"x-mailer": "ActiveCampaign (Postmark)",
"mime-version": "1.0"
},
"attachments": [
{
"filename": "document.pdf",
"contentType": "application/pdf",
"size": 84234,
"content": "JVBERi0xLjQK..."
}
],
"spf": "pass",
"dkim": "pass"
}
The id field is a unique, stable identifier you can use for idempotent processing. The spf and dkim fields reflect the authentication results JsonHook observed when receiving the message, which you can use to enforce additional trust policies in your handler.
Attachment content is standard base64. Decode it with a single call in any language — Buffer.from(att.content, 'base64') in Node.js, base64.b64decode(att.content) in Python, and so on.
TypeScript handler for Postmark reply emails forwarded through JsonHook:
import express, { Request, Response } from 'express';
import crypto from 'crypto';
const app = express();
app.use(express.json());
app.post('/webhooks/postmark', (req: Request, res: Response) => {
const sig = req.headers['x-jsonhook-signature'] as string;
const payload = JSON.stringify(req.body);
const hash = crypto
.createHmac('sha256', process.env.JSONHOOK_SECRET!)
.update(payload)
.digest('hex');
if (hash !== sig) return res.status(401).json({ error: 'Invalid sig' });
const { from, subject, textBody, attachments } = req.body;
// Create support ticket from email reply
console.log(`New reply from ${from.address}: ${subject}`);
console.log(`Attachments: ${attachments?.length ?? 0}`);
res.sendStatus(200);
});
app.listen(3000);Common Postmark to Webhook Use Cases
Postmark is a premium transactional email provider with excellent deliverability, but its inbound processing requires configuring a dedicated inbound domain and working with Postmark's own webhook format. Teams that want a provider-agnostic processing layer can use JsonHook in front of Postmark's inbound stream for consistent JSON delivery.
- Support ticket auto-creation: Customer replies to Postmark-delivered receipts or notifications can be forwarded to JsonHook, which fires a webhook to your ticketing system the moment a reply arrives.
- Delivery status reconciliation: Forward Postmark delivery status notification emails (bounces, delays) to a webhook that updates your internal email status database and triggers re-send logic where appropriate.
- Automated invoice approval workflows: Finance teams that exchange invoices via Postmark-driven applications can forward approval-reply emails to a webhook that advances the invoice through an approval workflow.
- Customer onboarding response tracking: When users reply to onboarding sequence emails sent via Postmark, capture those replies with JsonHook to log engagement and trigger personalised follow-up sequences.