Pular para o conteúdo principal
Modelos definem conteúdo de mensagem reutilizável. Crie e gerencie-os no painel (/templates), pela API REST (/v1/templates) ou pelo servidor MCP (templates_create / templates_update / templates_delete). Ao enviar, referencie o modelo pelo templateId em POST /v1/messages/send e passe um objeto variables com chaves correspondentes.
Página de Templates do Pilot Status

Categorias

A categoria é definida no momento da criação e não pode ser alterada depois:
  • MARKETING — mensagens promocionais (as mais sensíveis às políticas do WhatsApp).
  • UTILITY — mensagens transacionais (atualizações de conta, alertas, lembretes).
  • OTP — mensagens de código único / de verificação.

Aprovação da Meta vs. modelos locais

  • Números oficiais (Meta): ao salvar um modelo com um número Meta selecionado, o painel pergunta se você deseja enviá-lo para revisão da Meta agora ou mantê-lo como rascunho e enviá-lo mais tarde. Uma vez enviado, categoria, idioma e status de aprovação seguem as regras da Meta. Um modelo só pode ser enviado em um número Meta depois de ter uma versão aprovada.
  • Números não oficiais (Pilot Status web): os modelos são criados localmente e são imediatamente utilizáveis — não há etapa de aprovação.
Os modelos retornados por GET /v1/templates trazem um campo source (de onde o modelo veio), um campo metaStatus (status de revisão da Meta, por exemplo PENDING, APPROVED, REJECTED) e uma flag sendable indicando se ele pode ser usado para envios agora.

Estrutura do modelo

Editor de template do Pilot Status
Apenas o body é obrigatório.
ComponenteObrigatórioO que é
HeaderopcionalTexto (≤60 caracteres, ≤1 variável) ou um item de mídia (IMAGE JPG/PNG, VIDEO MP4, DOCUMENT PDF).
BodyobrigatórioTexto principal (≤1024 caracteres) com marcadores {{variable}}.
FooteropcionalTexto estático ≤60 caracteres, sem variáveis.
ButtonsopcionalAté 10 botões: QUICK_REPLY (≤10), URL (≤2), PHONE_NUMBER (≤1, E.164 com código do país), COPY_CODE (≤1, alfanumérico ≤15 caracteres).
Valores de header de mídia: via REST passe header.url (URL http(s) pública) ou header.base64 (data URI, re-hospedado automaticamente no servidor). Via MCP apenas header.url é aceito.
Não existe header LOCATION. Também não são suportados: FLOW, CAROUSEL, CATALOG/MPM, LIMITED_TIME_OFFER, preenchimento automático/one-tap/zero-tap de OTP, botões VOICE_CALL e o parameter_format NAMED.

Regras de variáveis

  • Escreva variáveis como {{name}} no body, no header de texto e em botões de URL dinâmica (por exemplo https://shop.com/promo/{{link}} — uma variável, no fim da URL, nunca no domínio).
  • O body não pode começar nem terminar com uma variável — sempre inclua texto literal em ambas as extremidades.
  • Ao criar/atualizar via API ou MCP, um objeto examples mapeando todas as variáveis a um valor de exemplo real é obrigatório. Amostras ausentes retornam 400 TEMPLATE_EXAMPLES_REQUIRED com as chaves faltantes em details.missing.
  • O valor do copy-code é a única exceção: ele vai no botão como example (por exemplo ["PROMO10"]), não em examples de nível superior.
  • Ao enviar, todo marcador — incluindo chaves usadas apenas em botões — deve ser fornecido em variables, e cada valor deve ser uma string não vazia.

Formatação de texto

Marcadores de formatação do WhatsApp funcionam no body: *bold*, _italic_, ~strikethrough~, monospace. O header de texto não permite marcadores de formatação, emojis nem quebras de linha.

API de Modelos

curl -X POST "https://pilotstatus.com.br/v1/templates" \
  -H "x-api-key: ps_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "promo_coupon",
    "category": "MARKETING",
    "language": "pt_BR",
    "body": {
      "header": { "type": "IMAGE", "url": "https://cdn.example.com/banner.png" },
      "body":   { "text": "Hi {{name}}! Use it and get {{discount}} off." },
      "footer": { "text": "Limited-time offer" },
      "buttons": [
        { "type": "QUICK_REPLY",  "text": "I want it!" },
        { "type": "URL",          "text": "Buy", "url": "https://shop.com/promo/{{link}}" },
        { "type": "COPY_CODE",    "example": ["PROMO10"] }
      ]
    },
    "examples": { "name": "Maria", "discount": "10%", "link": "abc123" }
  }'
Uma criação bem-sucedida retorna 201:
{ "id": "tmpl_123", "name": "promo_coupon", "category": "MARKETING", "metaStatus": "PENDING" }
Após salvar, GET /v1/templates/{id} retorna todas as chaves de variáveis detectadas no array variables de nível superior (plano).

Erros comuns de envio e submissão

SituaçãoCorreçãoCódigo Meta
Body começa/termina com uma variávelAdicione texto literal em ambas as extremidades2388299
Botão de URL em um domínio de exemplo (example.com, yourdomain.com…)Use o domínio real da sua empresa368/1346003
Botão de chamada com telefone sem código do paísUse E.164, por exemplo +5521999998888192
Variáveis demais em relação ao texto fixoAdicione texto ou remova variáveis2388293
Enviar um modelo ainda não aprovado pela MetaAguarde a aprovação131053
Variáveis enviadas não correspondem ao modelo aprovadoEnvie todas as chaves esperadas132000
Modelo pausado pela Meta por queda de qualidadeMelhore o conteúdo, reduza as denúncias132015
Um 404 ao enviar significa que o modelo não existe para a chave ou — em um número Meta — ainda não tem uma versão aprovada.

Relacionados