Skip to content
MailHaap

One domain.Three kinds of email.One reputation.

Your team's mailboxes, your app's transactional email and your marketing campaigns — with the deliverability engineering already done.

  • #Mailboxes
  • #Transactional-API
  • #Campaigns
  • #Deliverability

3,000 recipients a month free, forever. No card. The builder needs no account at all.

EU region by default

A business with a domain needs three unrelated things and today buys them from three vendors. Here they are on one bill, one dashboard, one DNS setup — and, critically, three isolated reputations.

[04]For the technical founder

Accept fast. Send async. Never lie about it.

The API never blocks on an upstream provider. It validates cheaply, persists the message and the queue job in one database transaction, and returns — target p99 under 150 ms.

  • One transaction, no orphans

    The message row and the queue job are inserted together. There is no window where a message exists without a job, or a job without a message.

  • An honest delivery guarantee

    At-most-once per idempotency key at accept. At-least-once at the provider boundary. Effectively-once for campaigns. We document the real guarantee, not a marketing claim.

  • Test mode that behaves

    Test keys accept identical requests, consume no quota, need no verified domain, and emit fully simulated webhook events on a realistic delay curve.

Read the docs →
send.ts
import { MailHaap } from "@mailhaap/node";

const mh = new MailHaap(process.env.MAILHAAP_API_KEY);

const { id } = await mh.emails.send({
  from: "Kadıköy Property <[email protected]>",
  to: "[email protected]",
  subject: "Order A-1043 confirmed",
  html: "<p>Hello {{ first_name }}</p>",
  tags: [{ name: "category", value: "order_confirmation" }],
});

console.log(id); // msg_01J8XQ7M2K9PQRSTUV
[05]Template gallery

Ninety templates. Fifteen sectors. No paywall.

Browse all 90

Every one ships with light and dark variants, a filled sample-data set, a suggested subject line and preheader, a matching plaintext version, and a note on when to use it.

[07]Deliverability

Our thresholds trigger before anyone else's do.

Providers begin review around a 5% bounce rate and pause sending around 10%. We never let a workspace get close: we flag at 2%, throttle at 3%, and stop the offending plane at 4% — that plane only, never the others.

How reputation scoring works →
Internal bounce and complaint thresholds by workspace state
StateBounceComplaintAction
Healthy< 2.0%< 0.05%None
Watch2.0–3.0%0.05–0.08%Dashboard notice
Throttle3.0–4.0%0.08–0.09%Rate cut to 30%
Pause≥ 4.0%≥ 0.09%Stop the plane
Emergency≥ 8.0%≥ 0.3%Freeze, escalate
[08]Pricing

Two meters, because storage and volume are different problems.

Mailbox plans · per mailbox / month

  • Starter10 GB€2.99
  • Standard25 GB€4.99
  • Pro50 GB€6.99

Sending plans · per workspace / month

  • Free3,000 / mo€0
  • Growth50,000€19
  • Scale250,000€69
  • Business1,000,000€199

A dedicated IP is a €25/month add-on and we only offer it above 250,000 messages a month. Below that volume a dedicated IP receives too little traffic to build reputation and performs worse than the shared pool. We would rather say that than sell it to you.

[09]Questions

Questions people actually ask

Because they share one thing that decides whether any of them work: your domain's reputation. Today you buy them from three vendors with three DNS setups that fight each other — SPF lookup limits, conflicting DMARC alignment — and no single view of how your domain is doing. One platform means one DNS setup, one suppression policy and one reputation view. The three sending planes stay isolated from each other so a purchased-list campaign can never stop your password resets.