← All comparisons

A Postmark alternative for transactional email and newsletters

Your password resets and your newsletter, in one account.

Mailcheer sends your application's emails through a JSON API, and your newsletters to a subscriber list that lives in the same workspace. Both share your verified domains, one suppression list and a free plan of 3,000 emails a month.

Mailcheer and Postmark, point by point

CriterionMailcheerPostmark
Free plan3,000 emails a month100 emails every month [1]
Subscriber listsKept in Mailcheer: CSV import, sign-up forms with double opt-in, segmentsManaged outside Postmark, in Postmark's words [2]
Newsletter toolsBlock editor, list import, a report per campaignList uploads, a WYSIWYG editor and campaign-based reporting are not offered [2]
Webhook verificationHMAC‑SHA256 signature on every callNo HMAC signature; basic authentication and IP allowlisting recommended [3]
Where the data is storedGermany (database) and Ireland (sending)United States [4]
AttachmentsBase64 content in attachmentsBase64 Content in Attachments [5]

What this page says about Postmark comes from its public pricing, product, privacy and developer pages, read on September 22, 2026.

Your subscriber list lives in the same account

Import your list from a CSV file. Collect new subscribers with sign-up forms that confirm each address by double opt-in. Build segments, write in the block editor, and read a report for each campaign: delivered, opened, clicked, link by link.

An unsubscribe, a hard bounce or a spam complaint puts the address on the workspace's suppression list. Your newsletters skip it from then on, and your API calls to it come back refused, with the reason in the error.

Retry the call, send the email once

Your HTTP client times out on an invoice and retries. Add an Idempotency-Key header, and the retry sends nothing.

The call
curl -i -X POST https://mailcheer.com/api/v1/emails \
  -H "Authorization: Bearer mch_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: invoice-2026-0412" \
  -d '{
    "from": "Billing <billing@yourdomain.com>",
    "to": "customer@example.com",
    "subject": "Your September invoice",
    "html": "<p>Here it is.</p>"
  }'
First call
HTTP/1.1 202 Accepted

{"id": "cmu651xf200021n7nm68sikfw", "object": "email", …}
Same call, same key
HTTP/1.1 202 Accepted
Idempotent-Replay: true

{"id": "cmu651xf200021n7nm68sikfw", "object": "email", …}
Same key, different body
HTTP/1.1 409 Conflict

{"error": {
  "code": "idempotency_key_reused",
  "message": "This idempotency key was already used…"
}, …}

Mailcheer stores each idempotency key with the API key that sent it, plus a SHA-256 fingerprint of the body. Your invoice number or your order ID makes a good key.

Webhooks signed on every call

Each call carries Mailcheer-Signature: t=…,v1=…, an HMAC‑SHA256 of the timestamp and the raw body, made with your subscription's whsec_ secret. Your endpoint checks it in a few lines of code and refuses any timestamp older than 300 seconds, so an intercepted call cannot be replayed later.

You choose among seven events: email.delivered, email.opened, email.clicked, email.bounced, email.complained, subscriber.created, subscriber.unsubscribed. If your server stays silent, Mailcheer tries four more times over a little more than an hour and keeps every attempt in a log you can replay.

The fields a transactional email needs

  • attachments: files in base64, up to 20 per message and about 30 MB of real files.
  • cc and bcc: one address, or up to 50.
  • reply_to, tags and your own headers.
  • unsubscribe_url: Mailcheer writes the List-Unsubscribe and List-Unsubscribe-Post headers that Gmail and Yahoo expect.
  • track_opens: false: no tracking pixel in a login code or a password reset.

A refused call says what went wrong: an unverified domain, a suppressed address, a .exe attachment. The code field stays the same in every language, so your logic reads that one.

Your subscribers and your sends, hosted in Europe

The database, with your subscribers and your email history, runs on a server in Falkenstein, Germany. Your emails leave through Amazon SES in Ireland, in the eu-west-1 region.

Moving your send call

PostmarkMailcheer
HtmlBodyhtml
TextBodytext
Name / Content / ContentType (in Attachments)filename / content / content_type (in attachments)
X-Postmark-Server-TokenAuthorization: Bearer
MessageStreamremoved

MessageStream goes away: your API calls carry the transactional emails, and your newsletters go out as campaigns.

Frequently asked questions

Can Mailcheer manage my newsletter list as well as my transactional email?

Yes. Your subscribers, segments and sign-up forms live in the same workspace as your API keys. Emails sent through the API stay apart from that list; the two share your monthly count, your suppression list and bounce monitoring.

How does Mailcheer stop a retried request from sending twice?

Send an Idempotency-Key header with a value unique to each email, such as the invoice number. A retry with the same key and the same body returns the first response, marked Idempotent-Replay: true, and sends nothing. The same key with a different body returns 409 idempotency_key_reused.

How many emails does the free plan include?

3,000 a month, API sends and newsletters counted together, with no end date and no credit card. The API, webhooks and the MCP server come with it. Paid plans start at 40,000 emails for €19 a month excl. VAT.

Where does Mailcheer store my data?

The database runs on a server in Falkenstein, Germany. Emails leave through Amazon SES in Ireland (eu-west-1).

Send your transactional email and your newsletter from one account

Create your workspace, import your list and connect your application: 3,000 emails a month on the free plan, no credit card.