Wozapi WhatsApp REST + Webhooks

API WhatsApp multi-instancia para integracoes comerciais

A Wozapi permite conectar instancias WhatsApp, enviar mensagens, receber eventos por webhook, integrar com n8n, Chatwoot e Typebot, operar campanhas com fila e acompanhar logs de entrega. Cada instancia possui API key propria, webhook proprio, eventos, logs e limites comerciais por plano.

Autenticacao

API da instancia

Use para enviar mensagens, consultar status, configurar webhooks, contatos, perfil, grupos e integracoes da instancia.

x-api-key: woo_sua_api_key

Tambem aceitamos token: woo_sua_api_key em rotas simplificadas e Authorization: Bearer woo_sua_api_key em alguns endpoints publicos.

Painel e administracao

Use o JWT obtido no login para endpoints de conta, campanhas, CRM, usuarios, planos e administracao.

Authorization: Bearer jwt_da_conta

Endpoints administrativos externos podem exigir admintoken, configurado no ambiente.

Primeiros Passos

1. Criar ou obter uma instancia

No painel, crie uma nova instancia. A resposta da API ja entrega api_key, webhook_secret e URLs de webhook da instancia.

curl -X POST https://painel.wozapi.com.br/api/v1/instances \
  -H "Authorization: Bearer JWT_DA_CONTA" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Atendimento Comercial",
    "webhook_url": "https://seu-n8n.com/webhook/wozapi"
  }'

2. Conectar o WhatsApp

curl -X POST https://painel.wozapi.com.br/api/v1/instances/17/connect \
  -H "x-api-key: woo_sua_api_key"

3. Enviar uma mensagem

curl -X POST https://painel.wozapi.com.br/api/v1/instances/17/send-text \
  -H "x-api-key: woo_sua_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "number": "5548999999999",
    "text": "Ola! Mensagem enviada pela Wozapi."
  }'

Instancias

Instancias representam uma sessao WhatsApp independente. Cada instancia tem status, QR Code, numero conectado, perfil, API key, webhook proprio, logs e limites de uso.

MetodoEndpointDescricao
GET/api/v1/instancesLista instancias da conta autenticada por JWT.
POST/api/v1/instancesCria instancia e retorna API key, secret e pacote de webhook.
GET/api/v1/instances/:idDetalhes da instancia usando API key.
GET/api/v1/instances/:id/statusStatus, telefone, JID e identidade conectada.
GET/api/v1/instances/:id/qrQR Code atual quando a instancia estiver aguardando conexao.
POST/api/v1/instances/:id/connectInicia conexao e gera QR quando necessario.
POST/api/v1/instances/:id/reconnectForca reconexao controlada da sessao.
POST/api/v1/instances/:id/logoutDesconecta e limpa identidade local da sessao.
POST/api/v1/instances/:id/api-key/regenerateRotaciona a API key da instancia.

Resposta de criacao

{
  "success": true,
  "data": {
    "id": 17,
    "api_key": "woo_xxx",
    "webhook_secret": "whsec_xxx",
    "webhook": {
      "webhooks_url": "https://painel.wozapi.com.br/api/v1/instances/17/webhooks",
      "webhook_events_url": "https://painel.wozapi.com.br/api/v1/instances/17/webhook-events",
      "webhook_logs_url": "https://painel.wozapi.com.br/api/v1/instances/17/webhook-logs",
      "webhook_test_url": "https://painel.wozapi.com.br/api/v1/instances/17/webhook/test",
      "signing_header": "X-Wooapi-Signature",
      "secret": "whsec_xxx"
    }
  }
}

Mensagens

Os endpoints de mensagem usam a API key da instancia. O destinatario pode ser enviado como number, phone ou jid. Numeros devem incluir DDI e DDD, sem simbolos.

MetodoEndpointDisponivel
POST/api/v1/instances/:id/send-textTexto simples.
POST/api/v1/instances/:id/send-mediaImagem, video, audio ou documento por URL/base64.
POST/api/v1/instances/:id/send-locationLocalizacao com latitude, longitude, nome e endereco.
POST/api/v1/instances/:id/send-contactContato/vCard.
POST/api/v1/instances/:id/send-replyResponder citando uma mensagem.
POST/api/v1/instances/:id/messages/reactReacao a mensagem.
POST/api/v1/instances/:id/messages/readMarcar como lida.
POST/api/v1/instances/:id/messages/editEditar mensagem enviada quando suportado pela sessao.
POST/api/v1/instances/:id/messages/deleteApagar mensagem enviada quando suportado pela sessao.
POST/api/v1/instances/:id/messages/downloadDownload de midia recebida recente.
POST/api/v1/instances/:id/presenceDisponivel, digitando, gravando audio ou pausado.

Enviar midia

curl -X POST https://painel.wozapi.com.br/api/v1/instances/17/send-media \
  -H "x-api-key: woo_sua_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "number": "5548999999999",
    "url": "https://exemplo.com/catalogo.pdf",
    "caption": "Catalogo atualizado",
    "mime_type": "application/pdf",
    "file_name": "catalogo.pdf"
  }'

Envio assincrono

Use quando seu sistema nao deve aguardar o WhatsApp confirmar o envio no mesmo request. Adicione async: true, async_send: true, send_async: true ou mode: "async" no corpo da requisicao.

A API retorna HTTP 202 com queued: true, jobId, pendingMessageId e a mensagem salva como pending. O resultado final chega depois pelos webhooks message.sent ou message.failed.

Importante: requer QUEUE_DRIVER=bullmq, Redis disponivel e o worker npm run worker:messages em execucao. Se a fila nao estiver disponivel, a API retorna QUEUE_UNAVAILABLE.

curl -X POST https://painel.wozapi.com.br/api/v1/instances/17/send-text \
  -H "x-api-key: woo_sua_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "number": "5548999999999",
    "text": "Ola! Esta mensagem sera enviada pela fila.",
    "async": true
  }'

Resposta quando enfileirada

{
  "success": true,
  "message": "Mensagem enfileirada para envio",
  "data": {
    "queued": true,
    "jobId": "12345",
    "pendingMessageId": "out_1710000000000"
  }
}

Enviar localizacao

curl -X POST https://painel.wozapi.com.br/api/v1/instances/17/send-location \
  -H "x-api-key: woo_sua_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "number": "5548999999999",
    "latitude": -27.5949,
    "longitude": -48.5482,
    "name": "Wozapi",
    "address": "Florianopolis - SC"
  }'

Webhooks

Webhooks entregam eventos da instancia para sistemas externos. Cada webhook tem URL, secret HMAC, eventos filtrados, retentativas e logs de entrega.

Assinatura: a Wozapi envia X-Wooapi-Signature no formato sha256=<hmac_sha256_raw_body_hex>. Use o webhook_secret da instancia ou do webhook criado.
MetodoEndpointDescricao
GET/api/v1/instances/:id/webhooksLista webhooks configurados.
POST/api/v1/instances/:id/webhooksCria webhook com URL de destino.
PATCH/api/v1/instances/:id/webhooks/:webhookIdAtualiza URL, eventos, status, secret e tentativas.
DELETE/api/v1/instances/:id/webhooks/:webhookIdRemove webhook.
POST/api/v1/instances/:id/webhooks/:webhookId/testDispara evento de teste para o webhook escolhido.
GET/api/v1/instances/:id/webhook-eventsLista eventos registrados.
GET/api/v1/instances/:id/webhook-logsLista tentativas HTTP reais de entrega.
POST/api/v1/webhook-logs/:logId/retryReenvia evento associado a uma falha.

Criar webhook

curl -X POST https://painel.wozapi.com.br/api/v1/instances/17/webhooks \
  -H "x-api-key: woo_sua_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "n8n Atendimento",
    "url": "https://seu-n8n.com/webhook/wozapi",
    "events": ["message.received", "message.sent", "instance.connected", "instance.disconnected"],
    "retry_enabled": true,
    "max_attempts": 5
  }'

Eventos principais

  • message.received: mensagem recebida.
  • message.sent: mensagem enviada pela API/painel.
  • message.read, message.edited, message.deleted, message.reaction: eventos de mensagem.
  • instance.connected, instance.disconnected, instance.qr, instance.qr_expired: eventos de conexao.
  • webhook.sent, webhook.failed, webhook.retrying: eventos operacionais.

Integracao Com n8n

Para conectar no n8n, o integrador precisa apenas da URL da API, ID da instancia e API key. Para receber eventos, crie um node Webhook no n8n e cadastre a URL dele na Wozapi.

Enviar pelo n8n

  1. Adicione um node HTTP Request.
  2. Metodo: POST.
  3. URL: {{baseUrl}}/api/v1/instances/{{instanceId}}/send-text.
  4. Header: x-api-key = woo_sua_api_key.
  5. Body JSON com number e text.

Receber no n8n

  1. Crie um node Webhook no n8n.
  2. Copie a Production URL.
  3. Cadastre em /api/v1/instances/:id/webhooks.
  4. Use o payload recebido para responder, criar lead, abrir ticket ou acionar IA.

Node HTTP Request - enviar texto

{
  "method": "POST",
  "url": "https://painel.wozapi.com.br/api/v1/instances/17/send-text",
  "headers": {
    "x-api-key": "woo_sua_api_key",
    "Content-Type": "application/json"
  },
  "body": {
    "number": "5548999999999",
    "text": "Ola, {{$json.nome}}! Seu atendimento foi iniciado."
  }
}

Fluxo recomendado no n8n

  1. Webhook Trigger: recebe message.received da Wozapi.
  2. IF/Switch: separa mensagem de texto, midia, grupo ou contato.
  3. CRM/Planilha/Banco: registra lead e historico.
  4. IA ou regras: gera resposta.
  5. HTTP Request: envia resposta pela Wozapi usando a mesma API key.

Postman

A collection Wozapi ja inclui variaveis de ambiente e requests para health, instancias, status, envio, webhooks, contatos, campanhas, logs e administracao.

Variaveis da collection

VariavelExemploDescricao
baseUrlhttps://painel.wozapi.com.brURL publica da API.
jwteyJ...Token de conta para painel/admin.
instanceId17ID numerico da instancia.
instanceTokenwoo_xxxAPI key da instancia.
number5548999999999Numero alvo com DDI e DDD.
webhookUrlhttps://n8n.../webhook/wozapiURL de destino para eventos.

Contatos e Chats

MetodoEndpointDescricao
GET/api/v1/instances/:id/contactsLista/sincroniza contatos conhecidos.
POST/api/v1/instances/:id/contacts/checkVerifica se um numero possui WhatsApp.
POST/api/v1/instances/:id/contacts/infoBusca foto, nome, status e dados business.
POST/api/v1/instances/:id/contacts/blockBloqueia ou desbloqueia contato.
POST/api/v1/instances/:id/chats/stateArquiva, silencia ou fixa conversa quando suportado.

Perfil e Grupos

Perfil

  • GET /api/v1/instances/:id/profile: perfil, privacidade e business.
  • POST /api/v1/instances/:id/profile/name: altera nome.
  • POST /api/v1/instances/:id/profile/status: altera recado/status.
  • POST /api/v1/instances/:id/profile/photo: altera foto.

Grupos

  • GET /api/v1/instances/:id/groups: lista grupos.
  • POST /api/v1/instances/:id/groups: cria grupo.
  • POST /api/v1/instances/:id/groups/participants: adiciona, remove, promove ou rebaixa participantes.
  • POST /api/v1/instances/:id/groups/settings: nome, descricao, imagem e modo administrador.

Campanhas, Fila e CRM

A Wozapi possui recursos locais de campanhas, recipients, delays, pausar/cancelar, relatorios, leads, tags, notas, respostas rapidas e campos personalizados.

MetodoEndpointDescricao
POST/api/campaignsCria campanha com template, instancia, delays e agendamento.
POST/api/campaigns/:id/recipientsAdiciona destinatarios.
POST/api/campaigns/:id/startInicia/enfileira campanha.
POST/api/campaigns/:id/pausePausa campanha.
POST/api/campaigns/:id/cancelCancela campanha.
GET/api/campaigns/:id/reportRelatorio de enviados, entregues, lidos e falhas.
GET/POST/api/quick-repliesRespostas rapidas locais.
POST/api/leads/:id/notesNotas internas no lead.
POST/api/leads/:id/tagsTags no lead.

Admin, Observabilidade e Producao

O painel administrativo inclui metricas de instancias, filas, webhooks, alertas, logs, clientes, planos, backups e readiness de producao.

  • GET /health: banco, bridge, Redis/fila, readiness e bloqueios.
  • GET /api/admin/overview: visao geral de clientes, usuarios, instancias e mensagens.
  • GET /api/admin/wooapi-monitor: observabilidade por instancia, filas, webhooks e alertas.
  • GET /api/admin/logs?type=webhooks: logs administrativos.
  • GET /api/admin/backups, POST /api/admin/backups: backup operacional.
  • GET /docs/production-readiness.md: checklist de producao.

Limitacoes Comerciais Importantes

A Wozapi e uma plataforma de automacao para WhatsApp baseada em sessoes conectadas pelo cliente. Existe risco de desconexao, bloqueio, limitacao de conta, mudancas de comportamento do provedor e incompatibilidades futuras.

Para clientes que exigem botoes nativos oficiais, garantias formais de entrega/renderizacao ou SLA contratado diretamente com o provedor, avalie um projeto separado com canais oficiais.

  • Botoes interativos nativos oficiais nao fazem parte do produto vendavel nesta versao. Use texto, links, midia, webhooks e fluxos externos.
  • Use delays, limites por plano e boas praticas anti-spam.
  • Evite disparos massivos sem consentimento.
  • Configure Redis/BullMQ em producao para escala real.
  • Configure Stripe para billing automatizado e readiness comercial completo.
  • Mantenha backup de banco, sessoes e midias.