Templates
Conteúdo de e-mail reutilizável para transmissões, gerenciado no painel ou pela API.
Um template é conteúdo de e-mail reutilizável — assunto, HTML e uma parte em texto puro opcional — deixado pronto para a próxima transmissão. Crie um no painel, no editor de blocos ou direto em HTML no modo código, com os mesmos campos de mesclagem por contato que as transmissões usam, ou gerencie templates pela API. Escolher um template no editor da transmissão copia o conteúdo dele como ponto de partida; editar o template depois não altera aquela transmissão, e apagá-lo deixa todas as transmissões intactas.
Sem rascunhos, sem versões
Tudo o que você salva vale na hora. Não existe ciclo de rascunho/publicação
nem histórico de versões: o que GET /templates/{id} retorna é o ponto de
partida da próxima transmissão. Os campos no formato do Resend são preenchidos
de acordo — status é sempre published, published_at é igual a
created_at, current_version_id é o próprio id do template e
has_unpublished_versions é false — e POST /templates/{id}/publish é
um no-op idempotente, mantido para que o templates.publish() do SDK do
Resend (e o templates.create(...).publish()) funcionem.
Templates em HTML e o editor de blocos
Um template criado com html — pela API, pelo MCP ou por uma migração — é
escrito em HTML: o painel abre esse template na pré-visualização, e você edita
o HTML no modo código, com uma pré-visualização ao vivo ao lado. O HTML fica
exatamente como foi escrito: o editor de blocos nunca mexe nele sozinho,
porque, ao virar blocos, um layout de tabelas e CSS inline é simplificado e
perde o que os blocos não expressam. O template só vira blocos se você
escolher Converter em blocos no painel: como uma cópia convertida
(<name> (blocks), com o original intacto) ou no próprio template, e nesse
caso o HTML armazenado só muda quando você salvar.
O caminho inverso também existe: Editar como HTML passa um template de
blocos para o modo código, como cópia (<name> (HTML)) ou no próprio
template, e um template novo pode começar direto por lá. Os blocos viram o
HTML que eles geram; até você salvar, Voltar para blocos traz os blocos de
volta exatamente como estavam. No modo código, a parte em texto puro
gerada a partir do HTML acompanha as suas edições, e o texto puro enviado pela
API é mantido como está.
Aliases
Um template pode ter um alias — letras, dígitos, ., _ ou -,
começando com letra ou dígito, até 100 caracteres, sensível a maiúsculas e
único por equipe — e toda rota de template individual o aceita no lugar do id:
GET, PATCH, DELETE /templates/{id-ou-alias}, /publish e
/duplicate. Um alias já em uso é 409, "alias": null no PATCH o
remove, e um alias não pode ter a forma de um UUID (ficaria inacessível, já
que UUIDs são resolvidos por id primeiro).
API
POST /templatescom{ name, html, subject?, text?, alias? }→{ "object": "template", "id": "..." }.GET /templates— listagem com paginação por cursor, do mais novo para o mais antigo;GET /templates/{id-ou-alias}— o corpo completo.PATCH /templates/{id-ou-alias}— qualquer um dos campos acima;""ounulllimpasubjectoutext. Escreverhtmloutexttransforma um template criado no editor de blocos do painel em um de HTML puro (o documento de blocos do editor é descartado, já que ele regeneraria o conteúdo antigo no próximo salvamento pelo painel).DELETE /templates/{id-ou-alias}.POST /templates/{id-ou-alias}/duplicate— cria<name> (copy)com o mesmo conteúdo e sem alias.
Ainda não suportado
from,reply_toevariables— um valor na criação ou atualização é rejeitado com422 <campo> is not supported on templates yetem vez de descartado em silêncio; as leituras retornamnull,nulle[]. Coloquefromereply_tona transmissão, e use os campos de mesclagem diretamente — propriedades de contato não precisam de variáveis declaradas.- Enviar com um id de template — nem
POST /emailsnemPOST /broadcastsaceitam uma referência a template ainda; passehtml/textvocê mesmo (para transmissões, o seletor de template do editor no painel copia o conteúdo).