
Order shipped
A shipping notice with the order number, carrier and delivery estimate in a details table.
A receipt with the amount charged, what it was for, the card used and a link to the invoice.

Receipt for {{amount}}: {{description}}
{{companyName}} · Receipt
Payment received
Hi {{firstName}}, we charged your card and your account is paid up. Nothing else is needed from you.
Amount charged
{{amount}}
Description
{{description}}
Charged on
{{chargedOn}}
Payment method
Card ending {{last4}}
View invoice [{{invoiceUrl}}]
The invoice link opens a full breakdown you can download for your records.
If you do not recognise this charge, tell us and we will look into it the same day.
Contact billing support [{{supportUrl}}]
{{companyName}} · {{companyAddress}}Shown with sample values. The HTML and plain-text tabs keep the placeholders.
About
Send it after a successful charge. The amount, description, date and card sit in a table, a button opens the full invoice, and the footer gives a billing contact for anyone who does not recognise the charge.
Values
Required values have to come with every send. The rest fall back to the default shown here.
| Placeholder | Kind | Required | Default |
|---|---|---|---|
{{amount}} | Text | Required | None |
{{invoiceUrl}} | Link | Required | None |
{{description}} | Text | Optional | Pro plan, monthly |
{{chargedOn}} | Text | Optional | Today |
{{last4}} | Text | Optional | 0000 |
{{firstName}} | Text | Optional | there |
{{companyName}} | Text | Optional | OpenEmail |
{{companyAddress}} | Text | Optional | 548 Market Street, San Francisco, CA 94104 |
{{supportUrl}} | Link | Optional | mailto:[email protected] |
API
Create a template from this design once, then send it with the values for each message.
import { init, openemail } from '@openemail/sdk' init({ apiKey: process.env.OPENEMAIL_API_KEY }) const template = await openemail.templates.create({ name: 'Receipt', starter: 'invoice-receipt', publish: true,}) const sent = await openemail.templates.send(template.slug, { from: 'Northwind <[email protected]>', to: '[email protected]', props: { firstName: 'Maya', amount: '£49.00', chargedOn: '1 October 2026', last4: '4242', invoiceUrl: 'https://example.com/invoices/NW-2026-0412', }, slots: { companyName: 'Northwind', companyAddress: 'Northwind Ltd, 42 Harbour Lane, Bristol BS1 4XE', supportUrl: 'mailto:[email protected]', },}) console.log(sent.id, sent.status)Orders and billing

A shipping notice with the order number, carrier and delivery estimate in a details table.

A dispatch notice with the carrier, a tracking number set in mono and the delivery address.

An order confirmation with up to three line items and a total.

An invoice notice with the number, issue date, due date and amount due.

Advance notice of a renewal, with the plan, the date and the amount.

A trial reminder that says what actually happens on the last day.

A declined charge, with the amount, the card, the retry date and what happens next.
Start from one
Every template opens in the editor as blocks you can move, restyle or delete, and sends through the API with the values filled in.
Email infrastructure for businesses, AI, agents and personal email. Built for scale, privacy and control. Everything email should have had from day one.