Skip to content
MailToolFinder
How-To

How to Send Bulk Email with Postmark's New Bulk API

By MailToolFinder Team · · 8 min read

Sending the same product announcement to 10,000 users through a transactional email API has always been the ugly part of the job. You chunk the list into batches of 500, duplicate the entire HTML body into every single message object, build retry logic for the calls that fail, and write your own throttling so Gmail doesn’t start deferring you halfway through. The email itself takes ten minutes to write. The plumbing around it takes a week and then breaks quietly at 2am.

Postmark shipped a fix for this. The Bulk API, now live and flagged as new across Postmark’s product navigation, takes one message definition plus a recipient list and compiles the individual messages server-side. One call, thousands of emails, and Postmark handles the pacing. The payload difference is not marginal — duplicating a 5 KB HTML body across 10,000 message objects is 50 MB of upload; defining it once is a few hundred kilobytes.

This guide covers what you need before you start, how the send actually works, what it costs on top of your existing plan, and the specific limits that will bite you if nobody warned you about them.

What the Bulk API Actually Does

The old approach used Postmark’s /email/batch endpoint. Batch was built for a different problem: sending different messages to different recipients in one request. Because each message carries its own content, the payload grows linearly with your list, and Postmark caps the endpoint at 500 messages per request. Sending to 10,000 people meant 20 calls, your own chunking logic, and your own rate limiting.

The new /email/bulk endpoint inverts that. You set Subject, HtmlBody, TextBody, and any attachments once at the request level. Then you pass a Messages array where each entry is a recipient plus a TemplateModel of personalization variables. Postmark expands that into individual messages on its side and meters the send at whatever rate the receiving mailbox providers are currently tolerating.

Three things follow from that design, and they’re the whole reason to care:

  • The payload shrinks by orders of magnitude. Content is transmitted once, not once per recipient.
  • You delete your rate-limiting code. Postmark throttles automatically based on provider conditions.
  • Attachments are defined once and sent to everyone, instead of being re-uploaded with every message.

Postmark

Transactional email with exceptional deliverability, now by ActiveCampaign

4.6/5

Postmark, originally built by Wildbit and acquired by ActiveCampaign in 2022, is a transactional email service laser-focused on deliverability and speed. It consistently achieves...

Free plan · from $15/1,000 emails Verified Jul 14, 2026

Prerequisites

Four things need to be true before your first call.

1. Your account needs the Bulk API switched on. This is the step people trip over. The Bulk API is available on every Postmark plan including the free Developer tier, but it is not self-serve — you have to email support@postmarkapp.com and ask them to enable it. Postmark says turnaround is usually a few hours. Budget for a day if you’re sending on a deadline.

2. You need a Broadcast Message Stream. The Bulk API only works with Broadcast streams, not transactional ones. If you’ve only ever used Postmark for password resets, you may not have a Broadcast stream yet. Create one in the dashboard; it takes about thirty seconds and there’s no additional charge.

3. Your sending domain needs DKIM and Return-Path configured. This is table stakes for any Postmark stream, but broadcast traffic is scrutinized harder than transactional traffic by every mailbox provider. If your authentication is half-configured, bulk is where you’ll find out.

4. Your content needs to pass Postmark’s policy. Postmark’s content rules are stricter than most competitors’. Purchased lists, cold outreach, and anything resembling unsolicited marketing will get your account reviewed, Bulk API or not. This endpoint is for people you already have a relationship with.

Step by Step: Your First Bulk Send

Step 1 — Define the message once

Set everything that stays constant at the top level of the request body: From, Subject, HtmlBody, TextBody, MessageStream, and attachments. Note that {{FirstName}}-style variables can appear anywhere in these fields, including the subject line.

Step 2 — Build the recipients array

Each entry in Messages needs a To address and a TemplateModel object holding that recipient’s variables. Cc and Bcc are supported per-recipient. A minimal request looks like this:

POST https://api.postmarkapp.com/email/bulk

{
  "From": "updates@yourapp.com",
  "Subject": "New feature: {{FeatureName}}",
  "HtmlBody": "<html><body>Hi {{FirstName}}, check this out.</body></html>",
  "MessageStream": "broadcast",
  "Messages": [
    { "To": "user1@example.com",
      "TemplateModel": { "FirstName": "Alex", "FeatureName": "Dark Mode" } },
    { "To": "user2@example.com",
      "TemplateModel": { "FirstName": "Jordan", "FeatureName": "Dark Mode" } }
  ]
}

Every official Postmark library supports this — sendBulkEmail() in Node, emails.send_bulk() in Python, deliver_bulk() in Ruby, plus PHP and .NET equivalents. The Bulk API documentation has the full parameter reference.

Step 3 — Watch the 50 MB ceiling

There is no recipient count limit. There is a 50 MB total payload cap, and attachments count against it. Do the arithmetic before you send: a 2 MB PDF attached to a bulk send leaves 48 MB for everything else, which is plenty, because the attachment is only transmitted once. But a 40,000-recipient list with verbose TemplateModel objects can approach the ceiling on its own. If you’re near it, split into two calls.

Step 4 — Poll for status

Postmark returns a bulk request ID. Hit /email/bulk/{bulk-request-id} to get total message count, percentage completed, and a status of Accepted, Processing, or Completed. This is a poll, not a push — there’s no dedicated webhook for bulk-send progress, so if you want a progress bar in your admin panel you’ll be writing a polling loop. Standard Postmark delivery, bounce, and open webhooks still fire per message as normal.

What It Costs

Nothing extra. Messages sent via the Bulk API count against your monthly email allowance at the same rate as any other Postmark message — no per-call fee, no bulk surcharge.

Postmark’s plans, verified July 14, 2026:

  • Developer (Free): 100 emails/month, no expiry
  • Basic: $15/month for 10,000 emails; $1.80 per 1,000 over
  • Pro: $16.50/month for 10,000 emails; $1.30 per 1,000 over
  • Platform: $18/month for 10,000 emails; $1.20 per 1,000 over

The overage rate is the number that matters for bulk sending, because a broadcast is exactly the thing that blows past your included volume. The Basic-to-Pro upgrade costs $1.50/month and cuts overage by $0.50 per 1,000 — it pays for itself at roughly 13,000 emails/month. Unused emails do not roll over, and Postmark does not offer annual billing. Confirm current numbers at Postmark’s pricing page before you budget.

One genuine upside: broadcast traffic runs on separate IPs from your transactional traffic at no additional cost. Your password resets don’t inherit the reputation consequences of a newsletter that got a bad complaint rate, and vice versa. Providers that mix both on shared pools can’t offer that.

Bulk API vs Batch API

Bulk APIBatch API
Best forSame message, many recipientsDifferent messages per recipient
ContentDefined once, personalized with variablesDefined separately per recipient
AttachmentsOnce, sent to allIncluded with every message
Limit50 MB total payload500 messages per request
ThrottlingAutomaticYou build it
StreamsBroadcast onlyBroadcast and transactional

The rule is simple. One message going to a list? Bulk. Genuinely different messages? Batch. Transactional traffic of any shape? Batch, because Bulk won’t accept it.

Common Mistakes

Assuming it’s enabled. It isn’t. Your first call returns an error until support turns it on. Ask before you need it.

Sending to a stale list. Bulk sending to addresses that haven’t engaged in two years is how you convert a clean sender reputation into a dirty one in a single afternoon. Run the list through validation and drop the non-engagers before the first broadcast, not after.

Treating Postmark as a marketing platform. There is no subscriber management UI, no automation builder, no segmentation, no landing pages, and no visual campaign editor. Postmark gives you an endpoint. Everything upstream of that endpoint — who’s on the list, who unsubscribed, which segment gets which variant — is your application’s problem. If you want that layer, you want an actual marketing tool, not this.

Skipping the text body. Broadcast content without a plain-text alternative gets filtered more aggressively than transactional email does. Always set TextBody.

Where This Leaves Postmark

The Bulk API closes a real gap. Before it, teams running a product-update email through Postmark wrote their own batching layer or moved that traffic to a second vendor. Now the endpoint does the tedious part, and the broadcast stream isolation is a legitimate deliverability argument that SendGrid and Mailgun don’t fully match on shared infrastructure.

But the limitations are real, and Postmark hasn’t hidden them. Broadcast-only means the throughput win doesn’t apply to your highest-urgency traffic. The manual enablement step is friction with no obvious justification. The 50 MB cap is generous but is a cap. And the economics stay where they were: at $1.20–$1.80 per 1,000 overage emails, a million-message broadcast is expensive. Amazon SES charges a fraction of that per email and remains the volume answer for teams with the engineering capacity to run it.

Feature Postmark Twilio SendGrid
Rating 4.6/5 4/5
Starting Price $15/mo $15/mo
Free Plan 100 emails/month, never expires, test integration and side projects 100 emails/day (60-day trial), Marketing: 100 contacts
Founded 2009 2009
Email Templates 20 60
Integrations 30 320
Deliverability Rate 98.7% 95.5%
Marketing Automation
A/B Testing
Landing Pages
Segmentation
Drag & Drop Editor
SMS Marketing
Ecommerce Features
API Access
Multi-Language
Web Push Notifications
Live Chat
Advanced Analytics

See full Postmark vs Twilio SendGrid comparison

SendGrid’s counter-argument is one platform for everything: Essentials starts at $19.95/month covering the 50,000–100,000 emails/month range, with a bundled Marketing Campaigns module that includes the subscriber management Postmark refuses to build. Pro jumps to $89.95/month for up to 2.5M emails. The gap between those two tiers is awkward if you sit in the middle. Mailgun sits between the two, allowing promotional sending outright, with Basic at $15/month for 10,000 emails and Foundation at $35/month for 50,000 — but it mixes transactional and bulk on shared pools, which is precisely the contamination Postmark’s stream separation is built to prevent.

What Success Looks Like

A working bulk send looks like this: one API call returns a bulk request ID in under a second. The status endpoint moves from Accepted to Processing to Completed over the next several minutes — not instantly, because Postmark is deliberately pacing the send. Your bounce rate on the broadcast stream stays under 2%, your complaint rate under 0.1%, and your transactional stream’s delivery metrics don’t move at all, because it’s on different IPs.

If your transactional numbers do move after a broadcast, something is misconfigured — you’re almost certainly sending on the wrong stream.

For the wider field, see the best transactional email services ranking, the Postmark review for the full product assessment, or the Postmark vs SendGrid comparison if those two are your shortlist. Cost at your specific volume is in the Postmark pricing breakdown.

The Bottom Line

The Bulk API is a well-built solution to a narrow problem: one message, many recipients, no plumbing. It costs nothing extra, works on every plan, and inherits Postmark’s broadcast IP separation. If you already send transactional email through Postmark and you’ve been maintaining a batching layer for product announcements, delete it.

It does not turn Postmark into a marketing platform, and it doesn’t help your transactional traffic at all. Those are the two things worth being clear about before anyone on your team gets excited.

Best for Transactional Deliverability

Postmark

Transactional email with exceptional deliverability, now by ActiveCampaign

4.6/5

Free plan · from $15/1,000 emails

Pricing verified: Postmark 14 July 2026; SendGrid and Mailgun competitor figures 17 July 2026. Confirm current rates on each provider’s pricing page before budgeting.

Sources

  1. Postmark — Bulk email API reference — accessed 2026-07-17
  2. Postmark — Pricing — accessed 2026-07-14
  3. SendGrid — Email API pricing — accessed 2026-07-17
  4. Mailgun — Pricing — accessed 2026-07-17
  5. Amazon SES — Pricing — accessed 2026-07-17

Share this article

Related Articles