A API do Botmaker v2.0 permite enviar notificações e templates de WhatsApp de forma programática, criar e gerenciar campanhas em massa, consultar resultados de envios e administrar listas negras de contatos.
O WhatsApp permite que empresas enviem mensagens dentro de uma janela de 24 horas a partir da última mensagem do usuário. Fora dessa janela, é obrigatório utilizar templates (HSM) previamente aprovados pela Meta para retomar a conversa. As notificações são um produto pago do WhatsApp.
Método | Path | Descrição |
POST | /notifications | Criar e enviar uma notificação |
POST | /notifications/campaigns | Criar uma campanha de notificações |
GET | /notifications/campaigns | Listar campanhas existentes |
GET | /notifications/sent-results | Listar resultados de envios com contadores |
GET | /notifications/sent-results/{id} | Detalhe de uma instância com clientes |
POST | /notifications/contacts-blacklist | Adicionar contatos à lista negra |
GET | /notifications/contacts-blacklist | Listar contatos na lista negra |
DELETE | /notifications/contacts-blacklist/{c} | Remover contato da lista negra |
A API utiliza autenticação por API Key. O token é enviado no header de cada request.
Esquema de segurança
Propriedade | Valor |
Tipo | apiKey |
Nome do header | access-token |
Localização | header |
URL direta: https://go.botmaker.com/#/integrations/api
access-token: <SEU_ACCESS_TOKEN>
Content-Type: application/json
Accept: application/json
Endpoint | Método | Descrição |
GET /auth/credentials | GET | Obter credenciais atuais da API. |
POST /auth/credentials | POST | Atualizar/regenerar credenciais da API. |
DELETE /auth/credentials | DELETE | Excluir credenciais da API. |
Antes de enviar notificações, você precisa obter o ID do canal do WhatsApp. Esse valor é obrigatório no campo channelId do endpoint de notificações.
GET /channels
Parâmetros de query
Parâmetro | Tipo | Descrição |
platform | string | Filtrar por plataforma. Usar "whatsapp" para obter apenas canais de WhatsApp. |
active | boolean | Filtrar apenas canais ativos (true). |
Exemplo
GET https://api.botmaker.com/v2.0/channels?platform=whatsapp&active=true
Headers:
access-token: <SEU_ACCESS_TOKEN>
Resposta
{
"items": [
{
"id": "botproject-whatsapp-5511947038***",
"platform": "whatsapp",
"active": true,
"name": "Minha Linha WhatsApp",
"webhookId": "webhook_abc123"
}
]
}
Rate limit: 1 request por segundo.
⚠ O valor do campo "id" é o channelId que você precisará para enviar notificações.
Os templates devem estar aprovados pela Meta antes de poderem ser usados para enviar notificações. A API v2.0 permite criá-los, listá-los e excluí-los.
GET /whatsapp/templates
Parâmetros de query
Parâmetro | Tipo | Descrição |
state | string (enum) | Filtrar por status: APPROVED ou REJECTED. |
Exemplo
GET https://api.botmaker.com/v2.0/whatsapp/templates?state=APPROVED
POST /whatsapp/templates
Body (WhatsAppTemplateRequest)
Campo | Tipo | Obrigatório | Descrição |
name | string | Não | Nome do template em snake_case. Ex: "promo_inverno" |
phoneLineNumber | string | Condicional | Número da linha WhatsApp. Obrigatório apenas se houver mais de uma conta business. |
botName | string | Condicional | Nome do bot associado. Obrigatório se o projeto tiver múltiplos bots. |
category | string (enum) | Não | Categoria: MARKETING, UTILITY, AUTHENTICATION |
locale | string | Não | Idioma do template (ex: pt_BR, es_AR, en_US). |
header | object | Não | Cabeçalho do template (texto, imagem, vídeo ou documento). |
body | object | Sim | Corpo da mensagem com texto e variáveis. |
footer | object | Não | Rodapé do template. |
buttons | array | Não | Botões: QUICK_REPLY (máx 3), URL (máx 1), PHONE_NUMBER (máx 1). Não é possível combinar QUICK_REPLY com URL/PHONE_NUMBER. |
optInImage | string | Não | URL de imagem de exemplo mostrando o opt-in do usuário. |
Status possíveis de um template
Status | Descrição |
APPROVED | Aprovado pela Meta. Pronto para uso. |
REJECTED | Rejeitado pela Meta. Verificar notas de rejeição. |
ACCOUNT_PENDING | Pendente de revisão por parte da conta. |
BOTMAKER_PENDING | Pendente de revisão interna do Botmaker. |
Endpoint | Método | Descrição |
/whatsapp/templates/{idOrName} | GET | Obter detalhes de um template por ID ou nome. |
/whatsapp/templates/{idOrName} | DELETE | Excluir um template. |
POST /notifications
Cria e envia uma nova notificação dentro de uma campanha, ou adiciona mais contatos a uma notificação existente. Suporta WhatsApp, SMS e Email.
Campo | Tipo | Obrigatório | Descrição |
name | string | Sim | Nome da notificação. |
channelId | string | Sim | ID do canal. Obtido via GET /channels. Plataformas suportadas: WhatsApp, SMS, Email. |
campaign | string | Não | Nome ou ID da campanha, ou null para a campanha padrão. |
intentIdOrName | string | Não | ID ou nome do intent/template a ser disparado. O nome é o que aparece na página de bots do Botmaker. |
contacts | array | Sim | Lista de contatos destinatários (ver esquema NotificationContactRequest). |
Campo | Tipo | Obrigatório | Descrição |
contactId | string | Sim | ID do contato. No WhatsApp é o número de telefone com código do país. Ex: "5511955667788" |
variables | object | Não | Variáveis a serem definidas antes de executar o intent. Ex: {"nome": "João", "pedido": "ORD-123"} |
tags | object | Não | Tags (booleanos) a serem definidas antes de executar o intent. Ex: {"vip": true, "novo": false} |
webhookPayload | string | Não | Dados personalizados para receber na notificação do webhook. Qualquer string para rastreamento. |
POST https://api.botmaker.com/v2.0/notifications
Headers:
Content-Type: application/json
access-token: <SEU_ACCESS_TOKEN>
Body:
{
"name": "Confirmação Pedido #42",
"channelId": "botproject-whatsapp-5511947038000",
"campaign": "vendas_abril_2026",
"intentIdOrName": "confirmacao_pedido",
"contacts": [
{
"contactId": "5511955667788",
"variables": {
"nome": "João Silva",
"nroPedido": "ORD-2026-0042",
"total": "R$ 850,00"
},
"tags": {
"compradorFrequente": true
},
"webhookPayload": "order-tracking-042"
},
{
"contactId": "5511966778899",
"variables": {
"nome": "Maria Souza",
"nroPedido": "ORD-2026-0043",
"total": "R$ 420,00"
}
}
]
}
Código | Descrição |
201 | Notificação enviada com sucesso. |
400 | Dados da campanha ou notificação inválidos. |
429 | Rate limit excedido (máx 5 req/seg). |
POST /notifications/campaigns
Cria uma nova campanha de notificações. As campanhas agrupam envios para organizar e medir resultados.
Request Body (CampaignRequest)
Campo | Tipo | Obrigatório | Descrição |
name | string | Sim | Nome único da campanha. |
goal | string | Não | Texto que define o objetivo da campanha. |
Exemplo
POST https://api.botmaker.com/v2.0/notifications/campaigns
Body:
{
"name": "Promo Inverno 2026",
"goal": "Enviar cupons de desconto para usuários ativos do último mês"
}
Respostas
Código | Descrição |
201 | Campanha criada com sucesso. |
400 | Dados da campanha inválidos. |
429 | Rate limit excedido (máx 5 req/seg). |
GET /notifications/campaigns
Lista todas as campanhas de notificações. Retorna páginas de 250 campanhas. Continuar chamando o nextPageURL até que seja null.
Resposta (CampaignPage)
Campo | Tipo | Descrição |
nextPage | string | null | URL da próxima página. null se não houver mais dados. |
items | array | Lista de campanhas. |
Objeto Campaign (CampaignResponse)
Campo | Tipo | Descrição |
id | string | ID único da campanha. |
name | string | Nome da campanha. |
goal | string | Objetivo da campanha. |
active | boolean | Se a campanha está ativa. |
GET /notifications/sent-results
Lista as notificações enviadas com seus contadores de status (sent, delivered, read, answered). Retorna até 500 instâncias por página, ordenadas por data de início decrescente.
Parâmetros de Query
Parâmetro | Tipo | Obrigatório | Descrição |
notification-name | string | Não | Nome da notificação. Se fornecido, os filtros de data são ignorados. |
from | date-time | Condicional | Data mínima de início. Obrigatório se notification-name não for fornecido. Máximo 3 meses atrás. Formato ISO-8601. |
to | date-time | Não | Data máxima de início. Padrão: now() menos 1 dia. Formato ISO-8601. |
Exemplo por período de datas
GET https://api.botmaker.com/v2.0/notifications/sent-results
?from=2026-03-01T00:00:00Z
&to=2026-04-14T00:00:00Z
Exemplo por nome
GET https://api.botmaker.com/v2.0/notifications/sent-results
?notification-name=Welcome%20Message
Resposta (NotificationInstancesPage)
Campo | Tipo | Descrição |
nextPage | string | null | URL da próxima página (usar exatamente como vem com o header access-token). |
items | array | Lista de NotificationInstanceResponse. |
Objeto NotificationInstanceResponse
Campo | Tipo | Descrição |
notificationInstanceId | string | ID da instância da notificação. |
campaignName | string | Nome da campanha. Ex: "Marketing Campaign 2024" |
contactGroup | string | Grupo de contatos. Ex: "Premium Users" |
notificationName | string | Nome da notificação. |
start | string | Timestamp de início do envio. Ex: "2024-01-15T10:30:00Z" |
end | string | Timestamp de fim do envio. |
status | string | Status da notificação. Ex: "COMPLETED" |
details | object | Contadores de status (ver detalhe abaixo). |
Objeto de Contadores (NotificationInstanceDetails)
Campo | Tipo | Descrição |
sent | integer | Quantidade de mensagens enviadas. Ex: 100 |
delivered | integer | Quantidade de mensagens entregues. Ex: 95 |
read | integer | Quantidade de mensagens lidas. Ex: 80 |
answered | integer | Quantidade de mensagens respondidas. Ex: 25 |
error | integer | Quantidade de mensagens com erro. Ex: 5 |
GET /notifications/sent-results/{notificationInstanceId}
Obtém o detalhe de clientes para a última instância de uma notificação específica. Retorna 500 clientes por página com suporte a paginação.
Parâmetros de Path
Parâmetro | Tipo | Descrição |
notificationInstanceId | string | ID da instância. Ex: "notif_123456" |
Exemplo
GET https://api.botmaker.com/v2.0/notifications/sent-results/notif_123456
Resposta (NotificationInstanceDetailResponse)
Campo | Tipo | Descrição |
nextPage | string | null | URL da próxima página. null se não houver mais. |
notification | object | Info da notificação (NotificationInfo). |
customers | array | Lista de até 500 clientes (CustomerDetail). |
Objeto NotificationInfo
Campo | Tipo | Descrição |
campaignName | string | Nome da campanha. |
contactGroup | string | Grupo de contatos. |
notificationName | string | Nome da notificação. |
notificationId | string | ID da notificação. |
notificationInstanceId | string | ID da instância. |
start / end | string | Timestamps de início e fim. |
status | string | Status. Ex: "COMPLETED" |
details | object | Contadores (sent, delivered, read, answered, error). |
Objeto CustomerDetail
Campo | Tipo | Descrição |
customerId | string | ID do cliente no Botmaker. Ex: "002HITVZHY47SGW8FHCX" |
sessionId | string | ID da sessão. |
contactId | string | Número de telefone. Ex: "5511999995555" |
phone | string | Número de telefone. |
firstName / lastName | string | Nome e sobrenome do contato. |
string | Email do contato. | |
lastStatus | enum | Último status: sent | delivered | read | answered | error |
answeredMessage | string | Texto da resposta do cliente. Ex: "Sim, tenho interesse" |
answeredMessageId | string | ID da mensagem de resposta. |
status | object | Timestamps por evento (sent, delivered, read, answered, error). |
Objeto CustomerStatus (timestamps por evento)
{
"sent": "2024-01-15T10:30:00Z",
"delivered": "2024-01-15T10:30:05Z",
"read": "2024-01-15T10:35:00Z",
"answered": "2024-01-15T10:40:00Z",
"error": null
}
A blacklist impede que notificações sejam enviadas para determinados números de telefone.
POST /notifications/contacts-blacklist
Adiciona um ou mais contatos à lista negra. Limite: 1000 contatos por request.
Body
{
"contacts": ["5511999993333", "5521912349876"]
}
Código | Descrição |
204 | Contatos adicionados com sucesso. |
400 | Nenhum contato enviado. |
429 | Rate limit excedido. |
GET /notifications/contacts-blacklist
Retorna a lista paginada de contatos bloqueados. Usar nextPage para paginar.
DELETE /notifications/contacts-blacklist/{contact}
Exemplo
DELETE https://api.botmaker.com/v2.0/notifications/contacts-blacklist/5511999995555
Todas as datas devem usar o formato ISO-8601. Exemplo: 2026-04-14T16:21:20.535Z (Z = GMT-0).
Os envios em massa são processados em paralelo, portanto a ordem não é garantida. Para garantir sequência:
Código | Ação Recomendada |
400 | Verificar parâmetros do body e IDs. O campo errors[] contém o detalhe. |
401 | Regenerar ou verificar o access-token. |
404 | Verificar se o recurso (notificação, template) existe. |
429 | Implementar retry com backoff exponencial. Respeitar os limites por endpoint. |
Vários endpoints retornam respostas paginadas com um campo nextPage. Para percorrer todos os resultados:
{
"errors": [
{
"type": "VALIDATION_ERROR",
"source": "channelId",
"message": "Channel not found"
}
]
}
Passo 1 — Obter o Channel ID
GET https://api.botmaker.com/v2.0/channels?platform=whatsapp&active=true
// Resposta -> usar o campo "id" do canal desejado
Passo 2 — Verificar o template aprovado
GET https://api.botmaker.com/v2.0/whatsapp/templates?state=APPROVED
// Confirmar que o template desejado está na lista
Passo 3 — Criar a campanha (opcional)
POST https://api.botmaker.com/v2.0/notifications/campaigns
Body: { "name": "Vendas Abril", "goal": "Confirmações de pedido" }
Passo 4 — Enviar a notificação
POST https://api.botmaker.com/v2.0/notifications
Body:
{
"name": "Confirmação Pedido",
"channelId": "botproject-whatsapp-5511947038000",
"campaign": "Vendas Abril",
"intentIdOrName": "confirmacao_pedido",
"contacts": [
{ "contactId": "5511955667788", "variables": { "nome": "João" } }
]
}
Passo 5 — Consultar resultados
GET https://api.botmaker.com/v2.0/notifications/sent-results
?notification-name=Confirmação%20Pedido
Passo 6 — Ver detalhe por cliente
GET https://api.botmaker.com/v2.0/notifications/sent-results/{instanceId}
// Retorna cada cliente com seu status: sent, delivered, read, answered, error
Todos os envios realizados por API utilizando estes endpoints podem ser visualizados na seção https://go.botmaker.com/#/campaigns da plataforma. Da mesma forma, também é possível realizar envios diretamente a partir dessa seção.
Lembre-se de visitar nossa Central de Ajuda para obter mais informações.