MillionSend Docs
Conceitos

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 /templates com { 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; "" ou null limpa subject ou text. Escrever html ou text transforma 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_to e variables — um valor na criação ou atualização é rejeitado com 422 <campo> is not supported on templates yet em vez de descartado em silêncio; as leituras retornam null, null e []. Coloque from e reply_to na 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 /emails nem POST /broadcasts aceitam uma referência a template ainda; passe html/text você mesmo (para transmissões, o seletor de template do editor no painel copia o conteúdo).

Nesta página