Przejdź do dokumentacji
API

Wypisz szablony

Każdy szablon na połączeniu, od najnowszych, z paginacją kluczową (keyset).

GETapi.openemail.uk/templates

Uruchamia prawdziwe wywołanie na twojej przestrzeni roboczej, twoim własnym kluczem.

GET /templates

Każdy szablon na połączeniu, od najnowszych, z paginacją kluczową (keyset).

Dwa silniki

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

Szablon to treść zapisana raz i wysyłana wiele razy, i należy do POŁĄCZENIA, a nie do tego, kto ją napisał. Klucz przestrzeni roboczej widzi te same szablony co kolega z zespołu, a usunięcie konta autora ich nie zabiera.

engine: "blocks" przechowuje drzewo, którego rodzaje węzłów to eksporty @react-email/components (Section, Row, Column, Container, Text, Heading, Button, Link, Img, Hr, Markdown, CodeBlock i CodeInline), a ich propsy to własne propsy tych komponentów. Jest walidowane przy zapisie, więc zły węzeł to 422 na wywołaniu, które go zapisywało, a nie zepsuty e-mail później.

engine: "html" przechowuje znaczniki, które już masz, sanityzowane raz przy publikacji wersji. Po to się sięga, gdy twoje szablony to komponenty react-email żyjące w twoim własnym repozytorium: wyrenderuj komponent przez @react-email/render we własnym buildzie i wyślij wynik. Nie ma endpointu na JSX i nie będzie. To API przyjmuje HTML, bo to HTML czyta klient poczty, a wykonywanie cudzego komponentu kupiłoby piaskownicę, której nikt nie potrzebuje.

Deklarowane jakoWypełniane przezBrak przy wysyłce
`slots`ten, kto edytuje szablonrenderuje się własny default slotu
`props`ten, kto wysyłamissing_template_prop, 422, i żadna poczta nie wychodzi

Oba zapisuje się jako {{key}} w treści i w temacie, i oba niosą kind (text, url albo image), który decyduje, jak wartość jest escapowana przy podstawianiu. Klucz, którego nic nie deklaruje, wywala się przy publikacji; wartość url, której schemat nie jest http, https ani mailto, jest odrzucana, a nie renderowana.

Opublikowana wersja jest zamrożona. Edycja treści opublikowanego szablonu tworzy nową wersję roboczą, zamiast zmieniać to, co rozstrzygają żywe wysyłki, więc kolega przepisujący treść nie zmieni tego, co już wysyła twój kod, a przypięcie version sprawia, że nie zmieni tego także w chwili publikacji.

Przykład

Wymaga templates:read. limit sięga 100, status zawęża do draft, active albo archived, a cursor jest nieprzejrzysty, więc odsyłaj nextCursor, który dostałeś, zamiast budować własny.

curl
curl "$OE/templates?limit=25&status=active" -H "$AUTH"
Odpowiedź
{  "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 to to, co rozstrzyga wysyłka bez version, a latestVersion to wersja robocza siedząca na wierzchu. Ich rozbieżność oznacza, że ktoś edytował i nie opublikował. To nie jest błąd i warto pokazać to w logu wdrożenia.

Wiersz to metadane. Zadeklarowane slots i props wracają z pobrania, i to jest wywołanie, które trzeba wykonać, gdy musisz wiedzieć, co przekazać.