Editar e restaurar modelo
Altera assunto, corpo e estado de um modelo, ou o restaura ao texto original da plataforma.
Atualizar modelo de e-mail
Atualiza só os campos enviados. A mudança vale para todos os próximos e-mails que usarem o modelo. Não há validação da sintaxe das variáveis: confira com a rota de prévia antes de gravar. Um corpo sem nenhum campo não altera nada e devolve o modelo atual.
/api/v1/admin/email-templates/{id}AdminAltera o conteúdo de um modelo
Rota ligada ao módulo email-notifications: com o módulo desligado a resposta é 403. Leitura e prévia exigem permissão de e-mail (view_email); alterar, restaurar e enviar teste exigem manage_email ou manage_settings.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
subjectstringbody_htmlstringvariables.body_textstringstatusstringactivedisabledADnamestringrecipient_typestringcustomervendoradminallExemplo de requisição (Atualizar modelo)
curl -X PUT "$BASE_URL/api/v1/admin/email-templates/dfd62617-b4fe-40e0-8e16-82debd20fcc0" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"subject": "Esqueceu algo no carrinho em {{store_name}}?"
}'Resposta (Atualizar modelo)
{
"id": "dfd62617-b4fe-40e0-8e16-82debd20fcc0",
"slug": "abandoned_cart",
"name": "Abandoned Cart",
"subject": "Esqueceu algo no carrinho em {{store_name}}?",
"body_html": "<!DOCTYPE html><html lang=\"pt-BR\">...</html>",
"body_text": "You have {{item_count}} items in your cart. Complete your purchase: {{recovery_url}}",
"variables": [
"user_email",
"cart_total",
"item_count",
"recovery_url",
"recovery_token",
"store_url",
"cart_id"
],
"status": "A",
"is_system": true,
"recipient_type": "customer",
"language": "pt-BR",
"is_wired": true,
"created_at": "2026-03-16T08:15:47.267516Z",
"updated_at": "2026-07-20T19:43:49.057165Z",
"template_id": "dfd62617-b4fe-40e0-8e16-82debd20fcc0",
"body": "<!DOCTYPE html><html lang=\"pt-BR\">...</html>",
"timestamp": 1773648947,
"updated_timestamp": 1784576629
}Campos da resposta
iduuidslugstringabandoned_cart, order_status_shipped...). É por ele que o sistema escolhe qual modelo usar. O mesmo slug existe uma vez por idioma e destinatário.namestringsubjectstring{{nome}}.body_htmlstring{{nome}}.body_textstringvariablesarraystatusstringA ativo, D desativado.is_systembooleantrue para modelos que vêm com a plataforma. Só estes podem ser restaurados ao padrão.recipient_typestringcustomervendoradminalllanguagestringpt-BR, en).is_wiredbooleantrue quando existe um ponto do sistema que realmente envia este modelo. false indica modelo órfão, que nunca será enviado.created_atstringupdated_atstringErros (Atualizar modelo)
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O administrador não tem o privilégio exigido. | {"error":"insufficient privileges","privilege_required_any":["manage_email","manage_settings"]} |
| 400 | Corpo não é JSON válido. | {"error":"invalid request body","detail":"..."} |
| 500 | Modelo inexistente (a plataforma responde 500 aqui, não 404) ou falha de banco. | {"detail":"email template not found: 00000000-0000-0000-0000-000000000000","error":"failed to update email template"} |
Restaurar modelo ao padrão
Descarta as alterações e restaura assunto e corpo originais que vêm com a plataforma. Só vale para modelos de sistema (is_system true). Não precisa de corpo.
/api/v1/admin/email-templates/{id}/resetAdminDevolve um modelo de sistema ao texto original
Rota ligada ao módulo email-notifications: com o módulo desligado a resposta é 403. Leitura e prévia exigem permissão de e-mail (view_email); alterar, restaurar e enviar teste exigem manage_email ou manage_settings.
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição (Restaurar padrão)
curl -X POST "$BASE_URL/api/v1/admin/email-templates/dfd62617-b4fe-40e0-8e16-82debd20fcc0/reset" \
-H "Authorization: Bearer $TOKEN"Resposta (Restaurar padrão)
{
"id": "dfd62617-b4fe-40e0-8e16-82debd20fcc0",
"slug": "abandoned_cart",
"name": "Abandoned Cart",
"subject": "Seu carrinho em {{store_name}} ainda está reservado",
"body_html": "<!DOCTYPE html><html lang=\"pt-BR\">...</html>",
"body_text": "You have {{item_count}} items in your cart. Complete your purchase: {{recovery_url}}",
"variables": [
"user_email",
"cart_total",
"item_count",
"recovery_url",
"recovery_token",
"store_url",
"cart_id"
],
"status": "A",
"is_system": true,
"recipient_type": "customer",
"language": "pt-BR",
"is_wired": true,
"created_at": "2026-03-16T08:15:47.267516Z",
"updated_at": "2026-07-20T19:43:49.057165Z",
"template_id": "dfd62617-b4fe-40e0-8e16-82debd20fcc0",
"body": "<!DOCTYPE html><html lang=\"pt-BR\">...</html>",
"timestamp": 1773648947,
"updated_timestamp": 1784576629
}Campos da resposta
iduuidslugstringabandoned_cart, order_status_shipped...). É por ele que o sistema escolhe qual modelo usar. O mesmo slug existe uma vez por idioma e destinatário.namestringsubjectstring{{nome}}.body_htmlstring{{nome}}.body_textstringvariablesarraystatusstringA ativo, D desativado.is_systembooleantrue para modelos que vêm com a plataforma. Só estes podem ser restaurados ao padrão.recipient_typestringcustomervendoradminalllanguagestringpt-BR, en).is_wiredbooleantrue quando existe um ponto do sistema que realmente envia este modelo. false indica modelo órfão, que nunca será enviado.created_atstringupdated_atstringErros (Restaurar padrão)
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O administrador não tem o privilégio exigido. | {"error":"insufficient privileges","privilege_required_any":["manage_email","manage_settings"]} |
| 400 | O modelo não é de sistema, não existe, ou a plataforma não tem texto padrão para ele. | {"detail":"only system templates can be reset to defaults","error":"failed to reset email template"} |