Free
For side projects and testing.
- 1,500 emails per month, up to 50 a day
- 2 domains
- Sending and receiving email
- Templates and campaigns
- Email data stored in the EU
- Not included: SMTP and open and click tracking
Mailumi is an email API for your product. Send sign-up confirmations, password resets and receipts with one API request, receive incoming email as signed webhooks, and see what happened to every message.
1,500 free emails a month No credit card required

How it works
All you need is a domain you own and a server that can make an HTTPS request. The screenshots are from the Mailumi dashboard.
Add your domain and copy the SPF, DKIM and DMARC records into your DNS provider, or connect Cloudflare and Mailumi adds them for you. Mailumi checks the records automatically and shows when the domain is ready to send.
Domain setup guide
Give each key only the permissions it needs, limit it to one domain and set an expiry if you like. A key is shown once and stored only as a fingerprint, and you can revoke it instantly.
Authentication in the docs
Send with one POST request from any language. Each email shows when it was sent, delivered, opened and clicked, and the same events reach your webhook.
Send your first email
One click on Cloudflare, and step-by-step screenshots for 14 other DNS providers.

Features
One API and one dashboard for sending email, receiving email and delivery events. Sending, receiving, templates and campaigns are included in every plan, including Free.
Newsletters and announcements use the same monthly allowance as your API email.

For developers
Copy an example, set MAILUMI_API_KEY on your server and run it. The response gives you the email ID to follow its status.
1curl -X POST https://mailumi.com/api/v1/emails \2 -H "Authorization: Bearer $MAILUMI_API_KEY" \3 -H "Content-Type: application/json" \4 -H "Idempotency-Key: welcome-user-123" \5 -d '{6 "from": "Acme <hello@yourdomain.com>",7 "to": "alex@example.com",8 "subject": "Welcome aboard",9 "html": "<p>Your account is ready.</p>",10 "text": "Your account is ready."11 }'1// npm install mailumi2import { Mailumi } from 'mailumi';3 4const mailumi = new Mailumi(process.env.MAILUMI_API_KEY);5 6const { data, error } = await mailumi.emails.send({7 from: 'Acme <hello@yourdomain.com>',8 to: 'alex@example.com',9 subject: 'Welcome aboard',10 html: '<p>Your account is ready.</p>',11 text: 'Your account is ready.',12}, { idempotencyKey: 'welcome-user-123' });13 14if (error) throw new Error(error.message);15console.log(data.id, data.status);1import os2import requests3 4response = requests.post(5 "https://mailumi.com/api/v1/emails",6 headers={7 "Authorization": f"Bearer {os.environ['MAILUMI_API_KEY']}",8 "Idempotency-Key": "welcome-user-123",9 },10 json={11 "from": "Acme <hello@yourdomain.com>",12 "to": "alex@example.com",13 "subject": "Welcome aboard",14 "html": "<p>Your account is ready.</p>",15 "text": "Your account is ready.",16 },17 timeout=30,18)19email = response.json()20if not response.ok:21 raise RuntimeError(email["error"])22print(email["id"], email["status"])1<?php2$ch = curl_init('https://mailumi.com/api/v1/emails');3curl_setopt_array($ch, [4 CURLOPT_POST => true,5 CURLOPT_RETURNTRANSFER => true,6 CURLOPT_HTTPHEADER => [7 'Authorization: Bearer ' . getenv('MAILUMI_API_KEY'),8 'Content-Type: application/json',9 'Idempotency-Key: welcome-user-123',10 ],11 CURLOPT_POSTFIELDS => json_encode([12 'from' => 'Acme <hello@yourdomain.com>',13 'to' => 'alex@example.com',14 'subject' => 'Welcome aboard',15 'html' => '<p>Your account is ready.</p>',16 'text' => 'Your account is ready.',17 ]),18]);19$email = json_decode(curl_exec($ch), true);20if (curl_getinfo($ch, CURLINFO_HTTP_CODE) >= 300) {21 throw new RuntimeException($email['error']);22}23echo $email['id'];1package main2 3import (4 "bytes"5 "encoding/json"6 "fmt"7 "net/http"8 "os"9)10 11func main() {12 body, _ := json.Marshal(map[string]any{13 "from": "Acme <hello@yourdomain.com>",14 "to": "alex@example.com",15 "subject": "Welcome aboard",16 "html": "<p>Your account is ready.</p>",17 "text": "Your account is ready.",18 })19 req, _ := http.NewRequest("POST", "https://mailumi.com/api/v1/emails", bytes.NewReader(body))20 req.Header.Set("Authorization", "Bearer "+os.Getenv("MAILUMI_API_KEY"))21 req.Header.Set("Content-Type", "application/json")22 req.Header.Set("Idempotency-Key", "welcome-user-123")23 res, err := http.DefaultClient.Do(req)24 if err != nil {25 panic(err)26 }27 defer res.Body.Close()28 var email map[string]any29 json.NewDecoder(res.Body).Decode(&email)30 if res.StatusCode >= 300 {31 panic(email["error"])32 }33 fmt.Println(email["id"], email["status"])34}Use cases
Your application decides when an email is needed; Mailumi delivers it from your domain and records what happened. Transactional email and campaigns use the same verified domain and dashboard.
Sign-up confirmations, team invitations, billing notices and product notifications from one API.
Read moreOrder confirmations, receipts with invoice attachments and shipping updates from your store’s domain.
Read moreEvery client domain verified, with an API key per website and all delivery in one dashboard.
Read moreConfirmations with calendar invites, reminders and reschedules that follow the latest booking.
Read moreSeparate emails for buyers and sellers, with replies routed back through your platform.
Read morePassword reset emails that arrive in seconds, with a security checklist for your reset links.
Read moreComparing providers? See Mailumi as a Resend alternative, SendGrid alternative, Mailgun alternative, Postmark alternative, Mailchimp alternative or Brevo alternative, see all seven providers in one email API comparison, compare free email API plans, see where providers store your data on the EU email API page, or read the migration guide.
Database and files in the EU and sending from Ireland, on every plan.
Pricing
Every plan includes sending and receiving email, templates and campaigns, and keeps your email data in the EU. Pro and Scale add SMTP and open and click tracking. Paid plans are monthly, billed by card through Stripe, and you can cancel at any time.
For side projects and testing.
For products with real users.
For high-volume senders.
Prices in US dollars, excluding taxes. Compare plans and estimate your bill
FAQ
Can’t find what you’re looking for? Send us your question and a person will answer in the live chat.
Create a free workspace, verify your domain and send with one API request. 1,500 emails a month are free, with no credit card required.