---
title: "Mail from your app"
description: "Send receipts, codes and resets from your own code, and hear back when they land."
url: "https://openemail.uk/features/transactional-email"
---

Sending

# Mail from your app receipts, codes, resets

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

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

POST /emails

Your code

to buyer@northwind.co

template order-receipt

idempotency-key order\_10482

202 msg\_9f2c7a14 Sent once

Your endpoint hooks.acme.dev

email.sent msg\_9f2c7a14

email.delivered msg\_9f2c7a14

email.opened msg\_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.

Intro Invoice Follow-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.com acme.dev team.acme.com hey.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=…

Optional watch 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

dana@northwind.co Clicked

omar@lumen.io Sent

130 Sent 42 Opened 9 Clicked

Watch what happens after send

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

omar@lumen.io Skipped

Delivered 129

Bounced 3

Blocked omar@lumen.io Held back

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

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