Skip to content

An email API that also receives

Send sign-up codes, receipts and notifications from your own domain with one POST, signed with DKIM. When someone replies, the reply lands in a real mailbox on the same address instead of disappearing, ready for your code, your agent or a person.

Updated

Send in one call

curl
curl -X POST https://api.usemektup.com/v1/emails \
  -H "Authorization: Bearer $MEKTUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "hello@yourapp.com",
    "to": "new.user@example.com",
    "subject": "Your sign-up code",
    "text": "Your code is 482 913. It expires in 10 minutes."
  }'
Node.js, with an attachment and Reply-To
const res = await fetch("https://api.usemektup.com/v1/emails", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MEKTUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    from: "billing@yourapp.com",
    to: customer.email,
    subject: `Receipt for order ${order.id}`,
    html: renderReceipt(order),
    attachments: [{ filename: "receipt.pdf", contentType: "application/pdf", content: pdfBase64 }],
    replyTo: "support@yourapp.com",
  }),
});
// 202 { messageId, envelope }   429 over a limit   422 suppressed address
Python
import os, requests

r = requests.post(
    "https://api.usemektup.com/v1/emails",
    headers={"Authorization": f"Bearer {os.environ['MEKTUP_API_KEY']}"},
    json={
        "from": "alerts@yourapp.com",
        "to": "ops@yourapp.com",
        "subject": "Backup finished",
        "text": "Nightly backup completed in 4 minutes.",
    },
    timeout=20,
)
r.raise_for_status()

Fields: from, to, cc, bcc, subject, text and/or html, attachments (base64, up to 10 MB each and 25 MB per request), replyTo, and inReplyTo to answer a message in its own thread. The same call is the send_email MCP tool and mektup send-email in the CLI (npx mektup-cli).

What you get with it

  • Your domain, signed: Mektup generates a DKIM key per domain and gives you the SPF and DMARC records to add.
  • Replies that arrive: mail back to hello@yourapp.com lands in its mailbox, readable by API, webhook, webmail and IMAP.
  • The real delivery answer: sent, deferred or bounced, with the receiving server's own words.
  • A suppression list that stops sends to dead addresses before they hurt your reputation.
  • SMTP too: anything that can't call an API sends through mail.usemektup.com on 465 or 587.

Limits and price

Starter is $20 a month for 50,000 sent recipients a month, up to 2,000 a day, 300 an hour and 60 per five minutes, across 25 domains with unlimited mailboxes. Received mail is not counted. Over a limit the API answers 429 and SMTP 450; nothing is queued behind your back.

50,000 emails a monthPriceReceives into a mailbox
Mektup Starter$20Yes
Resend Pro$20Webhook; Inboxes in private beta
SendGrid Essentials$19.95Inbound Parse webhook
Mailgun Foundation$35Inbound routes
Postmark Pro$16.50 for 10,000, then $1.30 per 1,000Inbound webhook

From each company's pricing page on 23 October 2026.

Questions

What is the difference between an email API and email hosting?

An email API lets your software send (and with Mektup, receive) mail with HTTP calls. Email hosting gives people mailboxes they use in a mail app. Mektup is both on the same addresses, so the mail your app sends and the replies it gets live in one place.

Do I need a mailbox for every address I send from?

No. After the domain is verified you can send as any address on it, for example noreply@. Create a mailbox only for addresses that should receive replies, keep a copy in Sent or add a signature.

How do I know an email was delivered?

Each sent message gets a delivery_status of sent, deferred or bounced, with the receiving server's own SMTP answer in delivery_detail. Mektup delivers directly, without a relay, so that answer comes straight from Gmail, Outlook or whoever received it. GET /v1/emails/delivery-stats sums it up per mailbox.

What happens to addresses that bounce?

An address that is rejected as unknown or dead is added to your suppression list, and later sends to it are refused with 422 naming the address, instead of being dropped silently. Remove it with DELETE /v1/suppressions/:address when it works again.

Can I send newsletters with it?

Mektup is built for transactional and conversational mail. It has no audience lists, campaign scheduling or unsubscribe management, so newsletters belong in a marketing tool.

Start today, or talk to us?

Starter is $20 a month. Agencies get a quote for every client domain on one account.