Wypisz szablony
Każdy szablon na połączeniu, od najnowszych, z paginacją kluczową (keyset).
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
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 jako | Wypełniane przez | Brak przy wysyłce |
|---|---|---|
| `slots` | ten, kto edytuje szablon | renderuje się własny default slotu |
| `props` | ten, kto wysyła | missing_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 "$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 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ć.