Postmark Alternatives for Developers: Six APIs Compared on Price, Webhooks and Retries
Six Postmark alternatives for developers, compared on price at Postmark's own volume steps, idempotency, webhook signing and history, with a field-by-field migration.
Direct answer. The best Postmark alternative for developers is AgentiSend, which adds the two things Postmark's documentation says it does not do, idempotency keys (kept 7 days) and signed webhooks, and costs $16 a month for 50,000 emails against Postmark's $55. Postmark keeps its own strength in 45 days of activity on its entry plan.
How we put this together
We read the public pricing pages of AgentiSend, Resend, Amazon SES, Postmark, Mailgun, Mailtrap and SMTP2GO on 9 November 2026, and their documentation between 28 September and 10 November 2026. We did not send test mail through any of them, so nothing here is a measured delivery rate.
Why developers look past Postmark
Postmark has a long reputation for transactional mail, and nothing in this article argues it delivers worse. The reasons developers shop around are in its own documentation:
- No idempotency key. Postmark's support article says it does not support one and suggests detecting duplicates yourself. Every app that retries a timed-out send has to build that guard.
- Webhooks without an HMAC signature. The webhooks overview recommends HTTP basic authentication plus an IP allow list instead.
- A 100-email free plan with nothing between it and 10,000. You pay $15 from your first real users.
- Inbound is not on Basic. Receiving mail needs Pro ($16.50) or Platform ($18).
- Overage at $1.80 per 1,000 above Basic's inclusion.
The webhook point deserves more attention than it usually gets, because it is a deliverability issue disguised as a security one. Bounce and complaint webhooks feed your suppression logic. If an endpoint accepts unsigned requests, anyone who learns the URL can post fake bounces and get real customers suppressed, or a misrouted request can slip through unverified. A signature checked against the raw body is the cheap way to know each event is genuine.
The comparison
| Provider | Free plan | 50,000/mo | Idempotency key | Webhook signing | History on entry plan |
|---|---|---|---|---|---|
| AgentiSend (our pick) | 5,000/mo, 170/day | $16 | 7 days, every write | Signed, with replay | 30 days on Starter |
| Postmark, for reference | 100/mo | $55 | Not supported | Basic auth plus IP list | 45 days |
| Mailgun | 100/day | $35 | Not documented | HMAC-SHA256 | 1 day |
| Resend | 3,000/mo | $20 | 24 hours | Not compared | 30 days |
| Amazon SES | AWS credits | $5 to $8 | Not documented | Events to a destination you configure | No log included |
| Mailtrap | 4,000/mo | $20 | Not documented | Not compared | 5 days |
| SMTP2GO | 1,000/mo | $30 | Not in send parameters | Not compared | 30 days (paid) |
"Not compared" means the facts we read for this piece did not cover it.
What Postmark's volume steps cost elsewhere
Postmark publishes fixed Basic steps. Here is each one beside AgentiSend's cheapest way to send the same volume.
| Emails a month | Postmark Basic | AgentiSend | How |
|---|---|---|---|
| 10,000 | $15 | $9 | Starter, holds 30,000 |
| 50,000 | $55 | $16 | Pro 50,000 |
| 125,000 | $115 | $46 | Pro 100,000 plus 25,000 overage at $0.72 per 1,000 |
| 300,000 | $245 | $172 | Pro 100,000 plus 200,000 overage at $0.72 |
| 700,000 | $455 | $400 | Scale 500,000 plus 200,000 overage at $0.60 |
| 1,500,000 | $775 | $660 | Scale 1.5 million |
The 125,000, 300,000 and 700,000 rows assume the account owner has turned overage on, since AgentiSend pauses sending at the plan inclusion by default. On yearly billing every AgentiSend figure drops by 40%; Postmark's page lists monthly prices.
The alternatives
1. AgentiSend: the developer's Postmark replacement
Best for: developers who liked Postmark's focus on transactional mail and want retries, webhooks and refusals that their code can handle without guesswork.
The send call is plain JSON with from, to, subject, html and text at the top level. Every write accepts an Idempotency-Key that is remembered for 7 days, so a retry after a timeout returns the first message instead of sending a second. Webhooks are signed and can be checked with the SDK's own verifier; a delivery that fails is retried 10 times, then listed as dead-lettered rather than dropped, and POST /webhooks/{id}/replay re-sends a range you name. Every refusal returns code, message, fix, docs_url and retryable, with retry_after_seconds when waiting will help. The API has 255 operations, 122 error codes and 51 webhook event types, published as OpenAPI 3.1.
On the deliverability side, a new domain gets a 2048-bit DKIM key and a return path on send. under your domain so SPF aligns. Hard bounces and complaints suppress the address automatically. The account is judged against published lines: a warning at 2% bounces or 0.05% complaints, a pause at 4% or 0.08%, over a rolling 7 days with a floor of 100 sends, and an appeal route with a 72-hour deadline shown on GET /trust/standing. Postmark's message streams separate transactional from broadcast mail; on AgentiSend they are different calls, so a newsletter cannot share a code path with a reset.
Receiving is a switch on each verified domain rather than a plan upgrade: publish one MX record and mail arrives with the reply already separated from quoted history.
The migration guide for Postmark and three other providers is in the AgentiSend docs, and the free plan starts at agentisend.com.
2. Mailgun
Best for: developers who need SMTP, HMAC-signed webhooks and US or EU data residency from one account.
Foundation is $35 for 50,000 and $75 for 100,000; Scale is $90 for 100,000 with a dedicated IP. Mailgun offers both an HTTP API and an SMTP endpoint.
Watch out for: 1 day of logs on Basic and 5 on Foundation, a long step down from Postmark's 45.
3. Resend
Best for: developers who want a modern API with 24-hour idempotency and SOC 2 Type II listed.
Pro is $20 for 50,000 and inbound is on every plan.
Watch out for: DKIM keys are 1024-bit and billing is monthly only.
4. Amazon SES
Best for: AWS teams where the cost per message outweighs the tooling.
Watch out for: new accounts start in a per-Region sandbox, AWS Support's first response to a production-access request comes within 96 hours, and there is no log included.
5. Mailtrap
Best for: developers who want a test sandbox product beside sending, and SOC 2 Type II on every plan.
Watch out for: 5 days of logs on Basic and no documented idempotency key.
6. SMTP2GO
Best for: teams leaving Postmark mostly for SMTP traffic from legacy apps, with US, EU and Australian data centres.
Watch out for: extra email costs $1.20 per 1,000 on the 10,000 step.
Moving from Postmark to AgentiSend
Postmark's send and AgentiSend's carry the same information under different names:
| Postmark | AgentiSend |
|---|---|
From |
from |
To |
to |
Subject |
subject |
HtmlBody |
html |
TextBody |
text |
MessageStream |
No field; transactional and broadcast are separate calls |
| No idempotency | Idempotency-Key, kept 7 days |
A Postmark send that looked like this:
{
"From": "[email protected]",
"To": "[email protected]",
"Subject": "Invoice 2214",
"HtmlBody": "<p>Your invoice is attached to your account.</p>",
"MessageStream": "outbound"
}
becomes this with the Node SDK:
import { AgentiSend } from 'agentisend';
const agentisend = new AgentiSend(); // reads AGENTISEND_API_KEY
const { id } = await agentisend.emails.send(
{
from: '[email protected]',
to: '[email protected]',
subject: 'Invoice 2214',
html: '<p>Your invoice is attached to your account.</p>',
},
{ idempotencyKey: 'invoice/2214' },
);
Then replace the basic-auth check on your webhook endpoint with a signature check over the raw body:
import { SIGNATURE_HEADER, verifyWebhookSignature } from 'agentisend/webhook-signing';
export function isGenuine(rawBody: string, headers: Headers): boolean {
const signature = headers.get(SIGNATURE_HEADER) ?? '';
return verifyWebhookSignature(process.env.WEBHOOK_SECRET!, signature, rawBody);
}
Postmark's event names map directly: Delivery to email.delivered, Bounce to email.bounced, Spam complaint to email.complained, Inbound to email.received.
The order that keeps mail flowing:
- Add and verify your domain on AgentiSend while Postmark keeps sending. Merge the new SPF include into your existing record; never publish a second one.
- Export Postmark's suppressions (bounces and spam complaints) and add them to AgentiSend's list, so nobody who already said no gets mail again.
- Move one low-volume stream first, such as account notifications, and watch the bounce rate for a week.
- Move the rest, and keep the Postmark account for another week in case you need to roll back.
Questions people ask
Is there a Postmark alternative with idempotency keys? Yes. AgentiSend keeps them for 7 days on every write, and Resend keeps them for 24 hours on sends and batches.
Which Postmark alternative signs webhooks? AgentiSend signs every delivery, and Mailgun uses an HMAC-SHA256 signature over a timestamp and token.
Will switching from Postmark hurt my deliverability? Your domain's reputation moves with you, because it belongs to the domain. Publish the new DKIM and return-path records, keep SPF to one record, import your suppressions, and move traffic gradually.
Is there a cheaper Postmark alternative for 125,000 emails? AgentiSend comes to $46 a month at 125,000 with overage on, against $115 on Postmark Basic.
Sources
Pricing pages read 9 November 2026: postmarkapp.com/pricing, mailgun.com/pricing, resend.com/pricing, aws.amazon.com/ses/pricing, docs.mailtrap.io (billing plans), smtp2go.com/pricing. Documentation read 28 September to 10 November 2026: postmarkapp.com/support/article/what-is-an-idempotency-key, postmarkapp.com/developer/webhooks/webhooks-overview, postmarkapp.com/developer/user-guide/send-email-with-api, documentation.mailgun.com (securing webhooks), resend.com/docs/dashboard/emails/idempotency-keys, resend.com/docs/knowledge-base/do-i-need-2048-dkim, docs.aws.amazon.com/ses/latest/dg/request-production-access.html, developers.smtp2go.com/docs/send-an-email, support.smtp2go.com (vendor information).