Listar modelos
Todos os modelos da ligação, do mais recente para o mais antigo, com paginação por keyset.
Executa a chamada real contra o seu espaço de trabalho, com a sua própria chave.
GET /templates
Todos os modelos da ligação, do mais recente para o mais antigo, com paginação por keyset.
Dois motores
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $OPENEMAIL_API_KEY"Um modelo é um corpo guardado uma vez e enviado muitas vezes, e pertence à LIGAÇÃO e não a quem o escreveu. Uma chave de espaço de trabalho vê os mesmos modelos que um colega, e apagar a conta do autor não os leva consigo.
engine: "blocks" guarda uma árvore cujos tipos de nó são as exportações de @react-email/components (Section, Row, Column, Container, Text, Heading, Button, Link, Img, Hr, Markdown, CodeBlock e CodeInline) e cujas props são as desses próprios componentes. É validada à entrada, pelo que um nó inválido dá um 422 na chamada que o escreveu, em vez de um email partido mais tarde.
engine: "html" guarda markup que já tem, sanitizado uma vez quando a versão é publicada. É esta a opção a usar quando os seus modelos são componentes react-email que vivem no seu próprio repositório: renderize o componente com @react-email/render no seu próprio build e envie o resultado. Não há nenhum endpoint de JSX, nem vai haver. A API aceita HTML porque HTML é o que um cliente de email lê, e executar o componente de quem chama obrigaria a uma sandbox de que ninguém precisa.
| Declarado como | Preenchido por | Em falta no envio |
|---|---|---|
| `slots` | quem edita o modelo | é apresentado o default do próprio slot |
| `props` | quem envia | missing_template_prop, um 422, e nenhum correio sai |
Ambos se escrevem como {{key}} no corpo e no assunto, e ambos têm um kind (text, url ou image) que determina como o valor é escapado quando é substituído. Uma chave que nada declara falha na publicação; um valor url cujo esquema não seja http, https ou mailto é recusado em vez de apresentado.
Uma versão publicada fica congelada. Editar o corpo de um modelo publicado cria um novo rascunho em vez de alterar o que os envios em produção resolvem, pelo que um colega que reescreva o texto não pode alterar o que o seu código já envia, e fixar version significa que também não o pode alterar quando publicar.
Exemplo
Requer templates:read. limit vai até 100, status restringe a draft, active ou archived, e cursor é opaco, por isso devolva o nextCursor que recebeu em vez de construir um.
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 é o que um envio sem version resolve e latestVersion é o rascunho que está por cima dela. Se os dois diferirem, alguém editou e não publicou. Não é um erro, e vale a pena mostrá-lo num registo de implementação.
Uma linha é apenas metadados. Os slots e props declarados são devolvidos pela obtenção individual, que é a chamada a fazer quando precisa de saber o que passar a um modelo.