Sending

Mail from your app
receipts, codes, resets

Send receipts, codes and resets from your own code, and hear back when they land.

POST /emails
Your code
templateorder-receipt
idempotency-keyorder_10482
202msg_9f2c7a14Sent once
Your endpointhooks.acme.dev
email.sentmsg_9f2c7a14
email.deliveredmsg_9f2c7a14
email.openedmsg_9f2c7a14

The call answers with a message id. Every event your endpoint hears carries that same id.

How it works

Running in three steps.

  1. 01

    Verify your domain

    Publish the records shown in settings and the domain turns green.

  2. 02

    Issue a scoped key

    Limit a key to the addresses and domains it may send from.

  3. 03

    Post a message

    One call names the template, its values and the recipient. Retries cannot send twice.

What it runs on

The parts doing the work.

Nothing here is a separate product. Each one is a piece of the mailbox you already have.

REST API

A documented HTTP API with issuable, scopable, revocable keys.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Typed SDKs

A TypeScript client first, then the rest.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Templates

A body written once, versioned, and sent many times: from the composer, from your own code, or by an agent.

IntroInvoiceFollow-up
Hi Sarah, good to meet you at
Webhooks

Tell your endpoint when mail arrives, instead of making you poll.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Multiple domains

Point several domains at one inbox, subdomains included.

acme.comacme.devteam.acme.comhey.acme.io
DMARC policy

A starter p=none record, printed to copy or written by a sync, never tightened for you.

TXT_dmarc.acme.com

v=DMARC1; p=none; rua=…

Optionalwatch only

Nearby

Other jobs for the same inbox.

Send a newsletter

Design the email once, send it from your own code, and see what was opened.

Hi{{firstName}}Omar
Read the update
130Sent42Opened9Clicked
Watch what happens after send

See what happened to every send, and keep dead addresses out of the next one.

Delivered129
Bounced3
Blocked[email protected]Held back
An address per customer

Give every ticket, record or customer its own address, with nothing to create.

Ticket 8123ticket-8123@in.yourapp.com
Ticket 8124ticket-8124@in.yourapp.com
Toticket-8123@in.yourapp.com
Fromticket-8123@in.yourapp.comSame address

Your inbox,
on your own terms.

Email infrastructure for businesses, AI, agents and personal email. Built for scale, privacy and control. Everything email should have had from day one.

OpenEmail

Email infrastructure for businesses, AI, agents and personal email. Built for scale, privacy and control. Everything email should have had from day one.

© 2026 OpenEmail. All rights reserved.