Templates
Conteúdo de email reutilizável para broadcasts, gerenciado no painel ou pela API.
Um template é conteúdo de email reutilizável — assunto, HTML e uma parte em texto puro opcional — deixado pronto para o próximo broadcast. Componha um no editor de blocos do painel, com os mesmos campos de mesclagem por contato que os broadcasts usam, ou gerencie templates pela API. Escolher um template no compositor de broadcast copia o conteúdo dele como ponto de partida; editar o template depois não altera aquele broadcast, e apagá-lo deixa todos os broadcasts intactos.
Sem rascunhos, sem versões
Toda gravação entra em vigor 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 do próximo broadcast. 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 — é
autorado em HTML: o painel o abre na pré-visualização e o edita no modo
código (fonte ao lado de uma pré-visualização ao vivo), mantendo o HTML byte a
byte. O editor de blocos nunca o toca por conta própria, porque interpretar um
layout de tabelas e CSS inline como blocos o achata. Converter em blocos é uma
escolha explícita do usuário no painel: como uma cópia convertida
(<name> (blocks), com o original intacto) ou no próprio template, caso em
que o HTML armazenado só muda na próxima gravação.
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 time — 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;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 dashboard 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 dashboard).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_tono broadcast, 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 broadcasts, o seletor de template do compositor no painel copia o conteúdo).