Built on top

Email into your app
straight to your code

Mail arriving at your domain reaches your server as a signed webhook, seconds later.

in.yourapp.com
POSThooks.acme.dev/mailSigned200
typeemail.received
threadIdthread_2f9b4c
subjectInvoice 4021
GET/threads/thread_2f9b4cinvoice.pdf

Your endpoint answers 200. The event names the thread, so you fetch the message and its files by id.

How it works

Running in three steps.

  1. 01

    Point a domain here

    Add the domain and publish the records. Every address on it receives.

  2. 02

    Register your endpoint

    Pick the events, copy the signing secret, answer within five seconds.

  3. 03

    Read the message

    The event names the thread. Fetch it, and its files, by id.

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.

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.
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.
Catch-all addresses

Every address on the domain receives, including ones that have never been created. One switch closes it.

hello@yourdomain.comdelivered
billing@yourdomain.comdelivered
careers@yourdomain.comdelivered
anything-at-all@yourdomain.comdelivered
oct-2026-signup@yourdomain.comdelivered
Attachments

Pick them with the paperclip or paste them in. A pasted image lands in the body rather than the file list, and a file dragged onto the composer is not attached at all. On an OpenEmail mailbox incoming files sit in object storage, one object each, and opening a thread pulls every one of them.

contract_v3.pdf2.4 MB
brand-kit.zip18 MB
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.
Multiple domains

Point several domains at one inbox, subdomains included.

acme.comacme.devteam.acme.comhey.acme.io

Nearby

Other jobs for the same inbox.

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
Test your signup mail
Soon

Give each test run its own address and read the mail it receives.

signup-02@acme.com
Confirm your email730915
signup-01@acme.com418204
signup-02@acme.com730915
Email inside your product

Send, read and organise mail from your own code with a typed client.

awaitopenemail.emails.send({
})
idmsg_3e91c7
queuedsentdelivered
email.openedemail.clicked

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.