Перейти к документации
API

Список шаблонов

Все шаблоны подключения, новые сверху, с keyset-пагинацией.

GETapi.openemail.uk/templates

Выполняет настоящий запрос в вашем рабочем пространстве, с вашим собственным ключом.

GET /templates

Все шаблоны подключения, новые сверху, с keyset-пагинацией.

Два движка

shell
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $OPENEMAIL_API_KEY"

Шаблон — это тело, сохранённое один раз и отправляемое много раз, и принадлежит оно ПОДКЛЮЧЕНИЮ, а не тому, кто его написал. Ключ рабочего пространства видит те же шаблоны, что и коллега, а удаление аккаунта автора не забирает их с собой.

engine: "blocks" хранит дерево, виды узлов которого — это экспорты @react-email/components (Section, Row, Column, Container, Text, Heading, Button, Link, Img, Hr, Markdown, CodeBlock и CodeInline), а свойства — собственные свойства этих компонентов. Оно проверяется на входе, так что неправильный узел — это 422 на том вызове, который его записал, а не сломанное письмо позже.

engine: "html" хранит разметку, которая у вас уже есть, санируемую один раз при публикации версии. За этим вариантом стоит идти, когда ваши шаблоны — это компоненты react-email, живущие в вашем собственном репозитории: отрендерьте компонент через @react-email/render в своей сборке и отправьте результат. Эндпоинта для JSX нет и не будет. API принимает HTML, потому что именно HTML читает почтовый клиент, а выполнение чужого компонента потребовало бы песочницы, которая никому не нужна.

Объявлено какЗаполняетОтсутствует при отправке
`slots`тот, кто редактирует шаблонотрисовывается собственный default слота
`props`тот, кто отправляетmissing_template_prop, 422, и почта не уходит

Оба пишутся как {{key}} в теле и в теме, и у обоих есть kind (text, url или image), который решает, как значение экранируется при подстановке. Ключ, который нигде не объявлен, ломается при публикации; значение url, чья схема не http, https или mailto, отклоняется, а не отрисовывается.

Опубликованная версия заморожена. Правка тела опубликованного шаблона порождает новый черновик, а не меняет то, что разрешают живые отправки, так что коллега, переписывающий текст, не может изменить то, что уже отправляет ваш код, а закреплённая version не даст ему изменить это и в момент публикации.

Пример

Требует templates:read. limit доходит до 100, status сужает до draft, active или archived, а cursor непрозрачен, так что возвращайте выданный вам nextCursor, а не собирайте его сами.

curl
curl "$OE/templates?limit=25&status=active" -H "$AUTH"
Ответ
{  "object": "list",  "data": [    {      "object": "template",      "id": "tpl_9c1f0a4b7e05d3862c1f0a44",      "name": "Order shipped",      "slug": "order-shipped",      "description": null,      "status": "active",      "publishedVersion": 3,      "latestVersion": 4,      "createdAt": "2026-08-01T09:12:44.000Z",      "updatedAt": "2026-08-28T16:03:10.000Z"    }  ],  "hasMore": false,  "nextCursor": null}

publishedVersion — то, что разрешает отправка без version, а latestVersion — черновик, лежащий поверх. Их расхождение означает, что кто-то отредактировал и не опубликовал. Это не ошибка, и её стоит показать в журнале развёртывания.

Строка — это метаданные. Объявленные slots и props приходят при получении шаблона, и именно этот вызов нужен, когда надо узнать, что в него передавать.