Templates

Templates

Gerencie templates do WhatsApp Business: listar, criar, editar, remover e sincronizar da Meta.

Templates são mensagens pré-aprovadas pela Meta. Use-os para iniciar conversas ou reengajar contatos fora da janela de 24h.

GET /v1/templates

Lista templates do usuário.

GET /v1/templates 200401404429

Query: account_id (opcional; sem ele, retorna de todas as conexões do usuário).

Resposta 200: array de templates. statusPENDING | APPROVED | REJECTED | QUALITY_POOR. categoryAUTHENTICATION | MARKETING | UTILITY. Templates de conexões soft-deletadas são omitidos.

Resposta 200

[
{
  "id": "tpl_ckv...",
  "name": "boas_vindas",
  "language": "pt_BR",
  "category": "MARKETING",
  "status": "APPROVED",
  "components": { },
  "metaId": "987654321",
  "whatsAppAccountId": "ckv...",
  "userId": "usr_...",
  "syncedAt": "2026-06-20T10:00:00.000Z",
  "deletedAt": null,
  "createdAt": "2026-06-01T00:00:00.000Z",
  "updatedAt": "2026-06-20T10:00:00.000Z"
}
]

POST /v1/templates

Cria um template na Meta + banco.

POST /v1/templates 201400401404409422429

Body (JSON):

{
  "account_id": "ckv...",
  "name": "boas_vindas",
  "category": "MARKETING",
  "language": "pt_BR",
  "components": [
    { "type": "BODY", "text": "Olá {{1}}, bem-vindo!" }
  ],
  "allow_category_change": false
}
Campo Tipo Obrigatório Regras
name string Sim 1–512 chars, regex ^[a-z][a-z0-9_]*$ (minúsculas, dígitos, underscore)
category enum Sim AUTHENTICATION | MARKETING | UTILITY
language string Sim ≥ 2 chars (ex.: pt_BR)
components array Sim ≥ 1 componente (HEADER/BODY/FOOTER/BUTTONS)
account_id string Não opcional
allow_category_change boolean Não opcional

Resposta 201: o template criado (mesmo shape do GET), com metaId e status retornados pela Meta.

curl -X POST https://api.wablastmessage.com/v1/templates \
-H "Authorization: Bearer wak_sua_chave" \
-H "Content-Type: application/json" \
-d '{
  "name": "boas_vindas",
  "category": "MARKETING",
  "language": "pt_BR",
  "components": [{ "type": "BODY", "text": "Olá {{1}}, bem-vindo!" }]
}'

PUT /v1/templates/{id}

Edita um template (não pode estar PENDING).

PUT /v1/templates/{id} 200400401404409422429

Path: id (obrig.).

Body (JSON): ao menos um de:

{ "category": "UTILITY", "components": [] }

Após editar, o status volta a PENDING (re-aprovação Meta).

Tentar editar template com status PENDING retorna 400 TEMPLATE_PENDING — aguarde a Meta aprovar/rejeitar antes.


DELETE /v1/templates/{id}

Remove um template (Meta + banco).

DELETE /v1/templates/{id} 200401404409422429

Resposta 200:

{ "success": true }

404 da Meta é tratado como idempotente (template já removido na Meta → trata como sucesso).


POST /v1/templates/sync

Puxa os templates aprovados da Meta para o banco (upsert/revive + prune dos que sumiram).

POST /v1/templates/sync 200400401404409422429

Body (JSON):

{ "account_id": "ckv..." }

account_id opcional (default = conexão padrão).

Resposta 200:

{ "synced": 3, "updated": 5, "pruned": 1 }
CampoSignificado
syncedcriados no banco
updatedjá existiam, atualizados
prunedsoft-deletados (sumiram da Meta)
Pular para o conteúdo