API Reference
Base URL: http://localhost:8080
Dashboard
Visao Geral
WPP Gateway e uma API de WhatsApp com foco em disparo em massa e alta disponibilidade. O diferencial e o conceito de Instance Group - uma camada de orquestracao que gerencia multiplos numeros de WhatsApp como um pool unificado, com estrategias configuraveis de rotacao e failover.
Agrupe multiplos numeros com estrategias de failover, rotacao ou hibrido. O sistema escolhe automaticamente o melhor numero.
Budget diario/horario, delays humanizados, warmup progressivo, cooldown automatico e deteccao de degradacao.
Disparo em massa com spintax, variaveis, shuffle, agendamento e monitoramento em tempo real.
Autenticacao
Todas as requisicoes autenticadas devem incluir o header X-API-Key.
GET /v1/groups HTTP/1.1
Host: localhost:8080
X-API-Key: wpp_7d0e60e402b57c375571d4d390a0ddeef86c154103c76a26...
Content-Type: application/json
{
"success": true,
"data": { ... },
"meta": {
"total": 10,
"limit": 20,
"offset": 0
}
}
// Erro
{
"success": false,
"error": {
"code": "not_found",
"message": "Group not found"
}
}
Arquitetura
+-------------------------+
| API Gateway |
| (Auth + Rate Limit) |
+-----------+-------------+
|
+-----------v-------------+
| Group Orchestrator |
| (Strategy Engine) |
+-----------+-------------+
|
+-----------------+-----------------+
| | |
+--------v-------+ +------v--------+ +------v--------+
| Instance A | | Instance B | | Instance C |
| +55 11 9xxxx | | +55 11 8xxxx | | +55 21 9xxxx |
| status: active | | status: rest | | status: warm |
+--------+-------+ +------+--------+ +------+--------+
| | |
+-----------------+-----------------+
|
+-----------v-------------+
| WhatsApp Servers |
+-------------------------+
Stack
Componentes
Registro / Conta
/register
Sem autenticacao
Cria um novo tenant e retorna a API key.
{
"name": "Minha Empresa"
}
{
"success": true,
"data": {
"api_key": "wpp_7d0e60e402b57c375571...",
"tenant": {
"id": "uuid",
"name": "Minha Empresa",
"plan": "basic",
"max_groups": 5,
"max_instances": 20,
"is_active": true
}
}
}
/v1/account
Retorna os dados do tenant autenticado.
/v1/account
Atualiza dados da conta (nome).
/v1/account/usage
Retorna contagem de grupos e instancias.
/v1/account/audit-log
Log de auditoria. Query params: action, limit, offset
Grupos
Instance Groups sao pools de numeros WhatsApp com estrategias de routing configuravel.
/v1/groups
Cria um novo grupo.
{
"name": "campanha-marketing",
"strategy": "rotation",
"config": {
"daily_budget_per_instance": 200,
"hourly_budget_per_instance": 30,
"min_delay_ms": 2000,
"max_delay_ms": 7000
},
"webhook_url": "https://meusite.com/webhook",
"webhook_events": ["message.sent", "message.delivered", "instance.banned"]
}
/v1/groups
Lista todos os grupos do tenant.
/v1/groups/:groupId
Detalhes do grupo.
/v1/groups/:groupId
Atualiza configuracao/estrategia do grupo.
/v1/groups/:groupId
Deleta o grupo e desconecta todas as instancias.
/v1/groups/:groupId/status
Status consolidado com contagem de instancias por estado.
/v1/groups/:groupId/pause
Pausa todos os disparos do grupo.
/v1/groups/:groupId/resume
Retoma os disparos do grupo.
Instancias
Uma instancia = uma sessao WhatsApp = um numero. Gerenciadas dentro de um grupo.
/v1/groups/:groupId/instances
Adiciona uma instancia ao grupo.
{
"display_name": "Celular 01",
"priority": 1,
"daily_budget": 200,
"hourly_budget": 30
}
/v1/groups/:groupId/instances
Lista instancias do grupo.
/v1/instances/:instanceId
Detalhes da instancia (status, budget, delivery rate).
/v1/instances/:instanceId/qrcode
Retorna QR code para conectar o WhatsApp.
{
"success": true,
"data": {
"qr_code": "2@ABC123...",
"qr_base64": "iVBORw0KGgo...",
"expires_in": 60
}
}
/v1/instances/:instanceId/pair
Conecta via pairing code (alternativa ao QR).
{ "phone": "5511999999999" }
/v1/instances/:instanceId/connect
Reconecta sessao existente.
/v1/instances/:instanceId/disconnect
Desconecta (mantem credenciais salvas).
/v1/instances/:instanceId/restart
Desconecta e reconecta a instancia.
/v1/instances/:instanceId/status
Status de conexao (WebSocket state).
Mensagens
Envie mensagens via grupo (recomendado) - o orchestrator escolhe a melhor instancia automaticamente.
/v1/groups/:groupId/messages/send
Envia uma mensagem via grupo.
{
"to": "5511999999999",
"type": "text",
"content": {
"body": "Ola, tudo bem?"
}
}
/v1/groups/:groupId/messages
Lista mensagens. Query: status, limit, offset
/v1/groups/:groupId/messages/:messageId/status
Status de entrega da mensagem (queued, sent, delivered, read, failed).
Texto
{ "to": "5511999999999", "type": "text", "content": { "body": "Ola!", "preview_url": true } }
Imagem
{
"to": "5511999999999", "type": "image",
"content": { "url": "https://exemplo.com/foto.jpg", "caption": "Veja!", "mime_type": "image/jpeg" }
}
Video
{
"to": "5511999999999", "type": "video",
"content": { "url": "https://exemplo.com/video.mp4", "caption": "Assista!", "mime_type": "video/mp4" }
}
Audio
{
"to": "5511999999999", "type": "audio",
"content": { "url": "https://exemplo.com/audio.ogg", "mime_type": "audio/ogg; codecs=opus", "ptt": true }
}
ptt: true = mensagem de voz. ptt: false = arquivo de audio.
Documento
{
"to": "5511999999999", "type": "document",
"content": { "url": "https://exemplo.com/doc.pdf", "mime_type": "application/pdf", "filename": "Contrato.pdf" }
}
Localizacao
{
"to": "5511999999999", "type": "location",
"content": { "latitude": -23.5505, "longitude": -46.6333, "name": "Escritorio SP", "address": "Av. Paulista, 1000" }
}
Contato (vCard)
{
"to": "5511999999999", "type": "contact",
"content": {
"contacts": [{
"name": { "formatted_name": "Joao Silva", "first_name": "Joao" },
"phones": [{ "phone": "+5511999999999", "type": "CELL" }]
}]
}
}
Reacao
{ "to": "5511999999999", "type": "reaction", "content": { "message_id": "ABCDEF123", "emoji": "👍" } }
Envie emoji: "" para remover a reacao.
Enquete
{
"to": "5511999999999", "type": "poll",
"content": { "title": "Qual horario?", "options": ["Manha", "Tarde", "Noite"], "max_selections": 1 }
}
Lista (ate 10 itens)
{
"to": "5511999999999", "type": "list",
"content": {
"body": "Nosso cardapio:", "button_text": "Ver opcoes",
"sections": [{
"title": "Pizzas",
"items": [
{ "id": "pizza_1", "title": "Margherita", "description": "R$ 39,90" },
{ "id": "pizza_2", "title": "Pepperoni", "description": "R$ 44,90" }
]
}]
}
}
Broadcasts
/v1/groups/:groupId/messages/broadcast
Cria um disparo em massa.
{
"recipients": ["5511999999999", "5511888888888"],
"type": "text",
"content": { "body": "Ola {nome}!" },
"variables": { "5511999999999": { "nome": "Joao" } },
"options": { "shuffle_recipients": true, "spintax": true }
}
/v1/groups/:groupId/messages/broadcast
Lista broadcasts do grupo.
/v1/groups/:groupId/messages/broadcast/:broadcastId
Progresso do broadcast (total, sent, delivered, failed).
.../pause
Pausa o broadcast.
.../resume
Retoma o broadcast.
.../cancel
Cancela o broadcast.
Metricas
/v1/groups/:groupId/metrics
Resumo: enviadas, entregues, falharam, taxa de entrega.
/v1/groups/:groupId/metrics/daily
Metricas diarias. Query: from, to (YYYY-MM-DD)
/v1/groups/:groupId/metrics/instances
Metricas por instancia do grupo.
/metrics
Sem autenticacao
Prometheus metrics endpoint (formato texto).
Blacklist
/v1/groups/:groupId/blacklist
Lista numeros bloqueados.
/v1/groups/:groupId/blacklist
{ "numbers": ["5511999999999", "5511888888888"], "reason": "opt_out" }
/v1/groups/:groupId/blacklist/:number
Remove numero da blacklist.
Webhooks
/v1/groups/:groupId/webhook
{
"url": "https://meusite.com/webhook",
"events": ["message.sent", "message.delivered", "message.failed", "instance.status_changed"]
}
/v1/groups/:groupId/webhook
Configuracao atual do webhook.
/v1/groups/:groupId/webhook/test
Envia um evento de teste para o webhook configurado.
Schemas
Tenant
Group
Instance
Broadcast
Status & Estrategias
Instance Status
Estrategias de Grupo
Usa instancia primaria. Se falhar, promove a proxima por prioridade. Ideal para atendimento.
Distribui mensagens entre instancias respeitando budget. Ideal para marketing.
Rotacao com failover automatico. Combina alta vazao com resiliencia.