---
title: "Email into your app"
description: "Mail arriving at your domain reaches your server as a signed webhook, seconds later."
url: "https://openemail.uk/features/inbound-processing"
---

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.

[Open mail](https://openemail.uk/mail/inbox) [Get Started](https://openemail.uk/signup.md)[Every walkthrough](https://openemail.uk/features/in-practice.md)

in.yourapp.com

billing@in.yourapp.com Arrived

POST hooks.acme.dev/mail Signed 200

type email.received

to billing@in.yourapp.com

threadId thread\_2f9b4c

subject Invoice 4021

GET /threads/thread\_2f9b4c invoice.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.com delivered

billing@ yourdomain.com delivered

careers@ yourdomain.com delivered

anything-at-all@ yourdomain.com delivered

oct-2026-signup@ yourdomain.com delivered

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.pdf 2.4 MB

brand-kit.zip 18 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.com acme.dev team.acme.com hey.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 8123 ticket-8123@ in.yourapp.com

Ticket 8124 ticket-8124@ in.yourapp.com

To ticket-8123@ in.yourapp.com

From ticket-8123@ in.yourapp.com Same 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 email 730915

signup-01 @acme.com 418204

signup-02 @acme.com 730915

Email inside your product

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

await openemail.emails.send({

from: 'receipts@acme.com',

})

id msg\_3e91c7

queued sent delivered

email.opened email.clicked

[Every walkthrough](https://openemail.uk/features/in-practice.md)
