A Mailgun alternative for your API sends and your newsletters
One account for the password reset and the monthly letter.
Your application sends through a JSON API. Your newsletters leave from a block editor and a three-month calendar. One signed webhook tells your code what happened to both.
Your newsletters, in the account that sends your API emails
Import your subscribers from a CSV file, or collect them with sign-up forms that confirm each address by double opt-in. Group them into segments. Write in the block editor, or ask the writing assistant for a first draft. Then drag the letter onto a date of the three-month calendar, and it goes out on its own.
Each campaign gets its report: delivered, opened, clicked, link by link.
Your transactional emails stay out of that list. A customer who gets a receipt from your app never shows up among your subscribers, and your subscriber count stays the count of people who signed up.
One webhook for both kinds of email
Subscribe one URL to the events you need. Mailcheer posts the same JSON shape whether the email left through the API or in a campaign, and data.source tells your code which one.
POST /webhooks/mailcheer
Mailcheer-Event-Type: email.bounced
Mailcheer-Signature: t=1790064843,v1=5d1f…
{
"id": "evt_Qm3x…",
"type": "email.bounced",
"created_at": "2026-09-22T08:14:03.000Z",
"data": {
"message_id": "cmu651xf200021n7nm68sikfw",
"email": "customer@example.com",
"source": "api",
"subject": "Your September invoice",
"reason": "Permanent"
}
}{
"id": "evt_8Kd2…",
"type": "email.bounced",
"created_at": "2026-09-22T09:02:41.000Z",
"data": {
"message_id": "cmv0…",
"email": "reader@example.com",
"source": "campaign",
"campaign_id": "cmp_8d2",
"campaign_name": "September newsletter",
"subscriber_id": "cms…",
"subject": "What we learned this summer",
"reason": "Permanent"
}
}Seven events are available: email.delivered, email.opened, email.clicked, email.bounced, email.complained, subscriber.created and subscriber.unsubscribed.
Mailcheer-Signature carries a timestamp and an HMAC‑SHA256 of timestamp.body, signed with your whsec_ secret. The signature covers the whole body, so nobody can alter the event on its way to you. Refuse a timestamp older than 300 seconds, and an intercepted call cannot be replayed later.
If your endpoint does not answer 2xx within fifteen seconds, Mailcheer tries again after 30 seconds, 2 minutes, 10 minutes and 1 hour. Each delivery stays in a log, and you can replay it from your workspace or from the API. A test event takes the same path as a real one.
Mailcheer and Mailgun, point by point
| Criterion | Mailcheer | Mailgun |
|---|---|---|
| A 2,000-subscriber newsletter on the free plan | Leaves in one send: 3,000 emails a month, no daily cap | 100 emails per day [1] |
| API keys on the free plan | As many as you need, each with its own permissions | 2 API keys [1] |
| What the webhook signature covers | The timestamp and the full body (HMAC‑SHA256) | The timestamp and a random token (HMAC, SHA256) [2] |
| Webhooks on the free plan | Included, with delivery log and replay | Included [1] |
| Sending domains on the free plan | 1 | 1 [1] |
What this page says about Mailgun comes from its public pricing page and documentation, read on September 22, 2026.
A free plan sized for a newsletter
Mailcheer's free plan counts 3,000 emails per calendar month, API and campaigns together, with no daily cap. A 2,000-subscriber newsletter leaves in one send, and your app keeps the other 1,000 for its receipts.
The paid plans raise that count: 40,000 emails for €19 a month excl. VAT, then 150,000 for €49 and 500,000 for €129. You pay for what you send, and your subscribers stay unlimited on every plan.
A key for each program, limited to what it needs
Create as many API keys as you want, on every plan. Each key gets its permissions at creation, among seven: emails:send, subscribers:read, subscribers:write, campaigns:read, campaigns:write, webhooks:read, webhooks:write. Those permissions never change afterwards.
Give your billing service a key that sends and does nothing else. Give your AI agent a key that reads subscribers and cannot send. A call outside a key's permissions gets a 403.
Mailcheer shows the full key once and keeps only a fingerprint of it. Each key handles 600 requests a minute.
Moving your send call
Mailcheer reads JSON with a Bearer key, so you rewrite the call that sends.
-F from='…'from(display name inline, same string)--user 'api:KEY'Authorization: Bearer mch_live_…- Domain in the request URLDomain in
from, verified in your workspace -F to,-F subject,-F htmlto,subject,html
The domain leaves the URL: Mailcheer reads it from from and checks that you verified it in your workspace. cc, bcc, reply_to, tags, your own headers and base64 attachments go in the same JSON body.
Frequently asked questions
Can Mailcheer send transactional emails and newsletters from one account?
Yes. Your application sends through POST /api/v1/emails, and your newsletters go out as campaigns, from the editor or from the API. Both use your verified domains, the same monthly count and the same suppression list.
What changes in my code when I move from Mailgun?
The call that sends. Mailcheer takes a JSON body at https://mailcheer.com/api/v1/emails with an Authorization: Bearer key, where Mailgun's example sends form fields with basic authentication [3]. The sending domain comes from the from address, and you verify it in Mailcheer by publishing its DNS records.
How do I verify a Mailcheer webhook?
Compute the HMAC‑SHA256 of t.body with your subscription's whsec_ secret, then compare it in constant time with the v1 value of the Mailcheer-Signature header. Reject any t more than 300 seconds old. The API reference gives the function in Node.
Does the free plan have a daily sending limit?
No. The free plan counts 3,000 emails per calendar month, API sends and newsletters together. You can spread them across the month or send them the same morning.
Put your app and your newsletter in one account
Create your workspace, verify your domain and send your first API email on the free plan: 3,000 emails a month, no credit card.