VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/WhatsApp Commerce: canal e catálogo

Modelos e links

Lista os modelos de mensagem da conta na Meta, sugere modelos para criar, ajusta os modelos gerenciados e gera os links personalizados da mini-loja.

Um modelo de mensagem (template) é um texto que a Meta aprova antes do uso. É o único jeito de iniciar uma conversa ou de voltar a falar com o cliente depois de 24 horas sem resposta dele. O texto pode ter variáveis ({{1}}, {{2}}) e um botão com link. A criação do modelo na Meta é feita no Gerenciador de WhatsApp da Meta; estas rotas listam, sugerem e ajustam.

Há dois tipos de lista:

  • templates mostra o que existe na conta da Meta, ao vivo.
  • templates/managed mostra os modelos gerenciados pela plataforma: os mesmos modelos, com configurações extras (o texto de apoio, o rótulo do botão, o que o seller pode editar).

Modelos da conta na Meta

GET/api/v1/vendor/whatsapp/templatesSeller

Lista os modelos de mensagem da conta de WhatsApp Business

Consulta a Meta ao vivo, com a credencial do seller quando ela tem token e conta WhatsApp Business (business_account_id); senão, usa a conta padrão da loja. Devolve até 100 modelos.

Exemplo de requisição

bash
curl "$BASE_URL/api/v1/vendor/whatsapp/templates" \
  -H "Authorization: Bearer $TOKEN"

Resposta

200Modelos
json
{
  "templates": [
    {
      "name": "venddor_checkout_link",
      "language": "pt_BR",
      "status": "APPROVED",
      "category": "UTILITY",
      "components": [
        { "type": "BODY", "text": "Pronto para pagar? Seu checkout da *{{1}}* está aqui:" },
        { "type": "BUTTONS", "buttons": [{ "type": "URL", "text": "Pagar agora", "url": "https://minhaloja.io.venddor.com.br/wa/{{1}}" }] }
      ]
    }
  ],
  "total": 1
}

Campos da resposta

templatesarray
Modelos da conta.
templates[].namestring
Nome do modelo na Meta (minúsculas e sublinhado).
templates[].languagestring
Idioma, por exemplo pt_BR.
templates[].statusstring
Situação na Meta: APPROVED, PENDING ou REJECTED (a Meta pode devolver outros valores, como pausado).
templates[].categorystring
UTILITYMARKETINGAUTHENTICATION
Categoria. MARKETING custa mais por mensagem.
templates[].componentsarray
Estrutura do modelo (cabeçalho, corpo, rodapé, botões), no formato da Meta.
totalinteger
Quantidade de modelos devolvidos.

Erros

StatusQuandoCorpo
401 / 403Autenticação, módulo ou privilégioveja Ajustes do canal
422Nem o seller nem a loja têm token e conta da Meta{"error":"WhatsApp Cloud API is not fully configured.","code":"whatsapp.templates.not_configured","graph_code":0}
502A Meta recusou (token inválido, por exemplo) ou está fora do ar{"error":"...","code":"whatsapp.templates.meta_unavailable","detail":"...","graph_code":190}

O campo code é estável e serve para você tratar o erro. O graph_code repete o código de erro da Meta (190 é token inválido).

Modelos sugeridos

GET/api/v1/vendor/whatsapp/templates/modelsSeller

Sugere modelos prontos para criar na Meta

Não consulta a Meta. Devolve uma lista fixa de modelos recomendados (status de pedido, campanha com catálogo, link de checkout, retorno do atendente), cada um com o texto sugerido para colar na Meta, o nome sugerido e as variáveis que a plataforma preenche sozinha.

Exemplo de requisição

bash
curl "$BASE_URL/api/v1/vendor/whatsapp/templates/models" \
  -H "Authorization: Bearer $TOKEN"

Resposta

200Sugestões
json
{
  "models": [
    {
      "slug": "checkout_nudge",
      "suggested_name": "venddor_checkout_link",
      "language": "pt_BR",
      "category": "UTILITY",
      "use_case_pt": "Link de checkout (fora da janela 24h)",
      "use_case_en": "Checkout link (outside 24h window)",
      "body_example": "Pronto para pagar? Seu checkout da *{{1}}* está aqui:",
      "body_param_hints": ["{{vendor_name}}"],
      "has_url_button": true,
      "url_button_base": "/wa/{{1}}",
      "url_button_label": "Pagar agora",
      "cta_purpose": "checkout"
    }
  ],
  "var_catalog": [
    { "key": "store_link", "label_pt": "Link da loja (mini-shop)", "label_en": "Store mini-shop link", "example": "https://loja…/wa/{token}" }
  ],
  "meta_url": "https://business.facebook.com/wa/manage/message-templates/"
}

Campos da resposta

modelsarray
Modelos sugeridos.
models[].slugstring
Identificador interno do modelo sugerido.
models[].suggested_namestring
Nome para digitar na Meta ao criar.
models[].languagestring
Idioma sugerido.
models[].categorystring
UTILITYMARKETINGAUTHENTICATION
Categoria sugerida.
models[].use_case_ptstring
Para que serve, em português.
models[].use_case_enstring
Para que serve, em inglês.
models[].body_examplestring
Texto do corpo, com as variáveis {{1}}, {{2}}.
models[].body_param_hintsarray
Qual dado da plataforma preenche cada variável, na ordem.
models[].has_url_buttonboolean
true se o modelo tem botão com link dinâmico.
models[].url_button_basestring
Padrão do link do botão. Registre na Meta com o endereço público da loja na frente.
models[].url_button_labelstring
Rótulo do botão.
models[].cta_purposestring
storecartcheckout
Para onde o botão leva.
models[].notes_ptstring
Orientação extra em português.
models[].notes_enstring
Orientação extra em inglês.
var_catalogarray
As variáveis que a plataforma sabe preencher: key, label_pt, label_en, example.
meta_urlstring
Endereço do gerenciador de modelos da Meta.

Erros

StatusQuandoCorpo
401 / 403Autenticação, módulo ou privilégioveja Ajustes do canal

Modelos gerenciados

GET/api/v1/vendor/whatsapp/templates/managedSeller

Lista os modelos gerenciados visíveis ao seller

Devolve os modelos da loja inteira (scope: "T") e os do próprio seller (scope: "V"). Por padrão só os aprovados.

Parâmetros de consulta

approvedstringpadrão: 1
Com 0, devolve também os pendentes, rejeitados e desativados. Qualquer outro valor mantém só os aprovados.

Exemplo de requisição

bash
curl "$BASE_URL/api/v1/vendor/whatsapp/templates/managed" \
  -H "Authorization: Bearer $TOKEN"

Resposta

200Modelos gerenciados
json
{
  "templates": [
    {
      "id": "3d4e5f60-0000-4000-8000-000000000001",
      "name": "venddor_checkout_link",
      "language": "pt_BR",
      "category": "UTILITY",
      "status": "A",
      "status_label": "APPROVED",
      "scope": "T",
      "meta_template_id": "9988776655",
      "body_param_defaults": ["{{vendor_name}}"],
      "cta_purpose": "checkout",
      "cta_label": "Pagar agora",
      "seller_body_template": "Pronto para pagar? Seu checkout está aqui:",
      "allow_seller_edit_params": true,
      "allow_seller_edit_cta": false,
      "created_at": "2026-10-01T12:00:00Z",
      "updated_at": "2026-10-01T12:00:00Z"
    }
  ]
}

Campos da resposta

templatesarray
Modelos gerenciados.
templates[].iduuid
Id do modelo gerenciado. Use em managed/{id} e em web-preview/send.
templates[].namestring
Nome do modelo na Meta.
templates[].languagestring
Idioma.
templates[].categorystring
Categoria da Meta.
templates[].statusstring
APRX
Situação: A aprovado, P pendente, R rejeitado, X desativado ou pausado.
templates[].status_labelstring
Mesma situação por extenso (APPROVED, PENDING, REJECTED, DISABLED).
templates[].scopestring
TV
T modelo de toda a loja, V modelo de um seller.
templates[].vendor_iduuid
Seller dono, quando scope é V.
templates[].meta_template_idstring
Id do modelo na Meta.
templates[].componentsarray
Estrutura do modelo, no formato da Meta.
templates[].body_param_defaultsarray
Valores padrão das variáveis do corpo, na ordem. Aceitam as variáveis da plataforma (por exemplo {{vendor_name}}).
templates[].cta_purposestring
Para onde o botão leva (store, cart ou checkout).
templates[].cta_labelstring
Rótulo do botão.
templates[].seller_body_templatestring
Texto livre usado quando a conversa está dentro da janela de 24 horas.
templates[].allow_seller_edit_paramsboolean
Se o seller pode alterar body_param_defaults e seller_body_template.
templates[].allow_seller_edit_ctaboolean
Se o seller pode alterar cta_purpose e cta_label.
templates[].rejection_reasonstring
Motivo da Meta, quando rejeitado.
templates[].quality_scorestring
Qualidade informada pela Meta.
templates[].synced_atstring
RFC 3339. Última sincronização com a Meta.
templates[].created_atstring
RFC 3339.
templates[].updated_atstring
RFC 3339.

Erros

StatusQuandoCorpo
401 / 403Autenticação, módulo ou privilégioveja Ajustes do canal
500Falha ao ler{"error":"..."}

Ajustar um modelo gerenciado

PUT/api/v1/vendor/whatsapp/templates/managed/{id}Seller

Ajusta as variáveis, o botão ou o texto de apoio de um modelo gerenciado

O seller não altera a estrutura aprovada pela Meta (corpo, categoria, componentes, escopo), só o que o administrador deixou liberado: as variáveis e o texto de apoio quando allow_seller_edit_params é true, e o botão quando allow_seller_edit_cta é true. Se os dois forem false, a resposta é 403.

Parâmetros de caminho

iduuidobrigatório
Id do modelo gerenciado.

Corpo da requisição

body_param_defaultsarray
Novos valores padrão das variáveis, na ordem. Ignorado se allow_seller_edit_params for false.
seller_body_templatestring
Novo texto livre para dentro da janela de 24 horas.
cta_purposestring
storecartcheckout
Para onde o botão leva. Ignorado se allow_seller_edit_cta for false.
cta_labelstring
Rótulo do botão. Ignorado se allow_seller_edit_cta for false.

Exemplo de requisição

bash
curl -X PUT "$BASE_URL/api/v1/vendor/whatsapp/templates/managed/$TEMPLATE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "body_param_defaults": [
    "{{vendor_name}}"
  ],
  "seller_body_template": "Pronto para pagar? Seu checkout está aqui:"
}'

Resposta

200Modelo atualizado
json
{
  "template": {
    "id": "3d4e5f60-0000-4000-8000-000000000001",
    "name": "venddor_checkout_link",
    "language": "pt_BR",
    "category": "UTILITY",
    "status": "A",
    "status_label": "APPROVED",
    "scope": "T",
    "body_param_defaults": ["{{vendor_name}}"],
    "cta_purpose": "checkout",
    "cta_label": "Pagar agora",
    "seller_body_template": "Pronto para pagar? Seu checkout está aqui:",
    "allow_seller_edit_params": true,
    "allow_seller_edit_cta": false
  }
}

Os campos de template são os da listagem.

Erros

StatusQuandoCorpo
400JSON inválido{"error":"invalid json"}
400Falha ao gravar{"error":"..."}
401 / 403Autenticação, módulo ou privilégioveja Ajustes do canal
403O administrador bloqueou as duas edições{"error":"admin disabled seller edits for this template"}
404Modelo inexistente ou de outro seller{"error":"not found"}
Atualização parcial

O que você não enviar fica como está. Em contrapartida, um texto vazio não apaga o valor atual: para esvaziar o seller_body_template ou o cta_label, não há caminho por esta rota.

Links personalizados da mini-loja

GET/api/v1/vendor/whatsapp/link-packSeller

Gera os links da mini-loja para o seller, com ou sem um cliente

Útil para pré-visualizar o que o cliente receberá e para preencher as variáveis de um modelo. Sem phone, devolve um link de visitante anônimo (nunca de um cliente real). Com phone, o link é personalizado para aquele telefone: quem abrir é reconhecido como esse cliente.

Parâmetros de consulta

phonestring
Telefone do cliente, com DDI. Opcional.
namestring
Nome do cliente para personalizar. Opcional.

Exemplo de requisição

bash
curl "$BASE_URL/api/v1/vendor/whatsapp/link-pack?phone=5511999990000" \
  -H "Authorization: Bearer $TOKEN"

Resposta

200Links
json
{
  "link_pack": {
    "store_link": "https://minhaloja.io.venddor.com.br/wa/eyJ0IjoicyJ9",
    "cart_link": "https://minhaloja.io.venddor.com.br/wa/eyJ0IjoicyJ9/cart",
    "checkout_link": "https://minhaloja.io.venddor.com.br/wa/eyJ0IjoicyJ9/checkout",
    "wa_catalog_link": "https://minhaloja.io.venddor.com.br/wa/eyJ0IjoicyJ9",
    "store_token": "eyJ0IjoicyJ9",
    "cart_token": "eyJ0IjoicyJ9/cart",
    "checkout_token": "eyJ0IjoicyJ9/checkout",
    "vendor_name": "Loja Centro",
    "vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
    "business_phone": "5511999990000",
    "wa_me_link": "https://wa.me/5511999990000",
    "customer_phone": "5511999990000",
    "public_base_url": "https://minhaloja.io.venddor.com.br",
    "web_preview_path": "/wa"
  },
  "vars": {
    "store_link": "https://minhaloja.io.venddor.com.br/wa/eyJ0IjoicyJ9",
    "vendor_name": "Loja Centro"
  },
  "var_catalog": [
    { "key": "store_link", "label_pt": "Link da loja (mini-shop)", "label_en": "Store mini-shop link", "example": "https://loja…/wa/{token}" }
  ]
}

Campos da resposta

link_packobject
Os links e dados do cliente.
link_pack.store_linkstring
Link da página inicial da mini-loja.
link_pack.cart_linkstring
Link do carrinho.
link_pack.checkout_linkstring
Link do checkout.
link_pack.wa_catalog_linkstring
Link do catálogo web (hoje igual a store_link).
link_pack.store_tokenstring
Só o trecho final do link da loja, para botões de modelo da Meta cujo link termina em /wa/{{1}}.
link_pack.cart_tokenstring
Trecho final do link do carrinho.
link_pack.checkout_tokenstring
Trecho final do link do checkout.
link_pack.vendor_namestring
Nome da loja.
link_pack.vendor_iduuid
Seller.
link_pack.business_phonestring
Telefone do número do seller, só dígitos.
link_pack.wa_me_linkstring
Link wa.me para abrir uma conversa com o número.
link_pack.customer_phonestring
Telefone do cliente, quando você o informou.
link_pack.customer_namestring
Nome do cliente, quando informado.
link_pack.public_base_urlstring
Endereço público da loja.
link_pack.web_preview_pathstring
Caminho base da mini-loja.
varsobject
Os mesmos dados no formato de variáveis de conversa, prontos para preencher modelos.
var_catalogarray
As variáveis conhecidas: key, label_pt, label_en, example.

Erros

StatusQuandoCorpo
400Não foi possível montar os links (por exemplo, a loja sem endereço público){"error":"..."}
401 / 403Autenticação, módulo ou privilégioveja Ajustes do canal
O link com telefone é uma chave de acesso

Quem tiver o link gerado com phone entra na mini-loja como aquele cliente. Trate-o como dado pessoal: envie só ao próprio cliente e não registre em logs públicos.

Veja também

  • Mini-loja
  • Caixa de entrada: carrinho e cobrança
Anterior
Catálogo na Meta
Próxima
Mini-loja
Nesta página
  • Modelos da conta na Meta
  • Exemplo de requisição
  • Resposta
  • Erros
  • Modelos sugeridos
  • Exemplo de requisição
  • Resposta
  • Erros
  • Modelos gerenciados
  • Exemplo de requisição
  • Resposta
  • Erros
  • Ajustar um modelo gerenciado
  • Exemplo de requisição
  • Resposta
  • Erros
  • Links personalizados da mini-loja
  • Exemplo de requisição
  • Resposta
  • Erros
  • Veja também