O mercado de APIs para WhatsApp cobra mensalidades abusivas: dezenas a centenas de reais por mês, com limites de uso, taxas por conversa e dados que passam por servidores de terceiros. O ZapUnlocked-API existe pra mudar isso.
Construída em Python com Neonize como motor de conexão, esta API oferece uma interface REST simples (FastAPI) para gerenciar sessões, enviar mídias complexas e criar interações inteligentes. Sem banco de dados pesado, sem mensalidade, sem depender de ninguém.
Nossa proposta é fundamentada na excelência técnica e na independência do desenvolvedor. Acreditamos que ferramentas poderosas devem ser acessíveis a quem constrói suas próprias soluções.
Tip
Perfeito para desenvolvedores que buscam agilidade na integração de bots, notificações e sistemas de atendimento automatizados. Sem pagar nada por isso.
Note
A API foi internacionalizada, todas as respostas, mensagens de erro e interface web agora estão em Inglês.
mindmap
root((⚡💬 ZapUnlocked-API))
📨 Mensagens
Texto
Mídia
Reações
Localização
Contatos
Links
Editar
Deletar
Ler
🔘 Interativas
Botões
Listas
OTP
PIX
Enquetes
🔍 Consultas
Contatos
Histórico
Chats
Memória
Disco
Database
Cleanup
🔗 Conexão
Status
SSE
QR Code
PNG
Pairing
Logout
📡 Webhooks
Criar
Listar
Editar
Deletar
Ativar
Testar
40 Eventos
⚙️ Perfil
Nome
Foto
Privacidade
Visto
Bloqueios
🤖 Bot
IA Tag
Auto Read
Rejeitar Calls
🛡️ IP Rules
Whitelist
Blacklist
📱 Instância
Conta
Dispositivo
Renomear
🖥️ Sistema
Env Vars
Media Cleanup
Auto Cleanup
| Funcionalidade | Descrição |
|---|---|
| 🧩 Botões Stateless | Crie fluxos interativos sem banco de dados, com webhooks criptografados |
| 🔢 Pareamento sem QR Code | Conecte via código numérico · ideal para servidores sem GUI |
| 🎵 Conversão Automática de Áudio | Envie áudios que aparecem como gravados na hora (PTT) nativamente |
| 📦 Fila de Mídias Inteligente | Gerenciamento automático para evitar consumo excessivo de memória |
| 🏷️ Placeholders Dinâmicos | Personalize mensagens e webhooks com {{name}}, {{day}}, {{phone}} |
Note
Todas as funcionalidades são 100% gratuitas e mantidas pela comunidade open-source.
📨 Envio de Mensagens · 15 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
POST |
/send |
Enviar mensagem de texto / responder | phone, message |
POST |
/send_image |
Enviar imagem | phone, image_url |
POST |
/send_video |
Enviar vídeo (suporta GIF e PTV) | phone, video_url |
POST |
/send_audio |
Enviar áudio (com conversão automática para PTT) | phone, audio_url |
POST |
/send_document |
Enviar documento | phone, document_url |
POST |
/send_sticker |
Enviar figurinha | phone, sticker_url |
POST |
/send_reaction |
Enviar reação com emoji | phone, messageId, emoji |
POST |
/send_location |
Enviar localização | phone, lat, lng |
POST |
/send_contact |
Enviar contato | phone, name, contactPhone |
POST |
/send_contacts |
Enviar múltiplos contatos | phone, contacts |
POST |
/send_link |
Enviar link com preview | phone, url |
POST |
/messages/delete |
Deletar mensagem | phone, messageId |
POST |
/messages/read |
Marcar como lida | phone, messageIds |
POST |
/messages/edit |
Editar mensagem enviada | phone, messageId, message |
🔘 Mensagens Interativas · 7 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
POST |
/messages/send-button-list |
Botão de lista de opções | phone, buttons |
POST |
/messages/send-button-actions |
Botão de ação | phone, buttons |
POST |
/messages/send-button-otp |
Botão de cópia (OTP) | phone, code |
POST |
/messages/send-button-pix |
Botão de PIX | phone, pixKey |
POST |
/messages/send-option-list |
Enviar lista de opções | phone, buttons |
POST |
/messages/send-poll |
Enviar enquete | phone, name, options |
POST |
/messages/send-poll-vote |
Votar em enquete | phone, options |
🔍 Consultas e Gestão · 8 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
POST |
/management/fetch_messages |
Buscar histórico de mensagens | phone |
POST |
/management/recent_contacts |
Listar chats recentes | ❌ |
GET |
/management/memory |
Status do uso de memória | ❌ |
GET |
/management/volume_stats |
Verificar uso de disco | ❌ |
DELETE |
/management/cleanup |
Limpar mídia temporária | ❌ |
GET |
/management/database/status |
Status e estatísticas do banco | ❌ |
POST |
/management/database/config |
Atualizar configurações do banco | interval |
POST |
/management/database/cleanup |
Limpeza manual do banco | ❌ |
👤 Contatos · 1 endpoint
| Método | Rota | Descrição | Body |
|---|---|---|---|
POST |
/contacts/info |
Informações detalhadas do contato | phone |
🏠 Geral · 3 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
GET |
/ |
Página de boas-vindas (HTML) | ❌ |
GET |
/status |
Status da conexão e sessão (JSON) | ❌ |
GET |
/status/stream |
Status em tempo real via SSE | ❌ |
🔗 Conexão (QR) · 2 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
GET |
/qr |
Visualizar QR Code interativo (HTML) | ❌ |
GET |
/qr/image |
Obter imagem do QR Code (PNG) | ❌ |
🔐 Sessão · 2 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
POST |
/session/pair |
Gerar código de pareamento numérico | phone |
POST |
/session/logout |
Desconectar e resetar sessão | ❌ |
📡 Webhooks (CRUD) · 8 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
POST |
/webhooks |
Criar webhook nomeado | name, url |
GET |
/webhooks |
Listar todos os webhooks | ❌ |
GET |
/webhooks/{name} |
Obter webhook por nome | ❌ |
PUT |
/webhooks/{name} |
Editar webhook | ❌ |
DELETE |
/webhooks/{name} |
Remover webhook | ❌ |
POST |
/webhooks/{name}/toggle |
Ativar / desativar | active |
POST |
/webhooks/{name}/test |
Testar webhook | ❌ |
GET |
/webhooks/events |
Listar tipos de eventos (40 tipos) | ❌ |
⚙️ Perfil e Privacidade · 3 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
POST |
/settings/profile |
Alterar nome e foto do bot | ❌ |
POST |
/settings/privacy |
Ajustar privacidade (visto por último, etc) | ❌ |
POST |
/settings/block |
Bloquear / desbloquear contato | phone, action |
🤖 Configurações do Bot · 6 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
GET |
/settings/bot |
Ver configurações do bot | ❌ |
POST |
/settings/bot |
Atualizar configurações (tag IA, IP control) | ❌ |
PUT |
/settings/instance/call-reject-auto |
Rejeitar chamadas automaticamente | value |
PUT |
/settings/instance/call-reject-message |
Mensagem de chamada rejeitada | value |
PUT |
/settings/instance/auto-read-message |
Leitura automática de mensagens | value |
GET |
/settings/phone-code/{phone} |
Gerar código de pareamento por número | ❌ |
📱 Instância · 3 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
GET |
/instance/me |
Dados da conta conectada | ❌ |
GET |
/instance/device |
Dados técnicos do dispositivo | ❌ |
PUT |
/instance/update-name |
Renomear instância | name |
🛡️ Regras de IP · 5 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
GET |
/settings/ip-rules |
Listar regras de IP (whitelist/blacklist) | ❌ |
POST |
/settings/ip-rules/whitelist |
Adicionar IP à whitelist | ip |
POST |
/settings/ip-rules/blacklist |
Adicionar IP à blacklist | ip |
DELETE |
/settings/ip-rules/whitelist/{ip} |
Remover IP da whitelist | ❌ |
DELETE |
/settings/ip-rules/blacklist/{ip} |
Remover IP da blacklist | ❌ |
🖥️ Sistema · 5 endpoints
| Método | Rota | Descrição | Body |
|---|---|---|---|
GET |
/system/env |
Ver variáveis de ambiente | ❌ |
PUT |
/system/env |
Atualizar variáveis de ambiente | ❌ |
POST |
/system/cleanup/force |
Limpeza forçada de mídia temporária | ❌ |
GET |
/system/cleanup/settings |
Ver configurações de limpeza automática | ❌ |
PUT |
/system/cleanup/settings |
Atualizar intervalo de limpeza automática | ❌ |
Total: 68 endpoints
Todos os webhooks recebem um envelope padrão:
{
"event": "message.text",
"timestamp": "2025-01-01T12:00:00Z",
"data": { ... }
}Se o webhook tiver um body customizado com {{placeholders}}, esse body é enviado em vez do envelope padrão.
🏷️ Placeholders disponíveis no body customizado
| Placeholder | Valor |
|---|---|
{{from}} |
Número do remetente |
{{text}} |
Texto da mensagem |
{{phone}} |
Mesmo que {{from}} |
{{id}} |
ID da mensagem |
{{requested}} |
Quantidade solicitada (fetchMessages) |
{{found}} |
Quantidade encontrada (fetchMessages) |
{{timestamp}} |
Timestamp UTC atual |
📥 Mensagens Recebidas · 16 eventos
Campos base presentes em eventos de mensagem recebida:
{
"messageId": "3EB0ABCDEF123456",
"from": "5511999999999",
"fromName": "João Silva",
"fromJid": "5511999999999@s.whatsapp.net",
"isGroup": false
}message.text - Texto simples / formatado
{
"event": "message.text",
"data": {
"...base": "...",
"text": "Olá! Como posso ajudar?",
"quoted": { "id": "3EB0...", "fromMe": true }
}
}message.image - Imagem recebida
{
"event": "message.image",
"data": {
"...base": "...",
"caption": "Foto do produto",
"mimetype": "image/jpeg",
"fileLength": 204800
}
}message.video - Vídeo recebido
{
"event": "message.video",
"data": {
"...base": "...",
"caption": "Veja esse vídeo!",
"mimetype": "video/mp4",
"fileLength": 5242880,
"isPTT": false,
"isGif": false
}
}message.audio - Áudio / nota de voz
{
"event": "message.audio",
"data": {
"...base": "...",
"mimetype": "audio/ogg; codecs=opus",
"fileLength": 30720,
"isPTT": true,
"durationSeconds": 8
}
}message.document - Documento / arquivo
{
"event": "message.document",
"data": {
"...base": "...",
"fileName": "contrato.pdf",
"caption": "Segue o contrato",
"mimetype": "application/pdf",
"fileLength": 102400
}
}message.sticker - Figurinha
{
"event": "message.sticker",
"data": {
"...base": "...",
"mimetype": "image/webp",
"isAnimated": false
}
}message.contact - Contato compartilhado
{
"event": "message.contact",
"data": {
"...base": "...",
"displayName": "Maria Souza",
"vcard": "BEGIN:VCARD\nVERSION:3.0\n..."
}
}message.location - Localização
{
"event": "message.location",
"data": {
"...base": "...",
"lat": -23.5505,
"lng": -46.6333,
"name": "Av. Paulista",
"address": "Av. Paulista, 1000 - São Paulo"
}
}message.reaction - Reação (emoji)
{
"event": "message.reaction",
"data": {
"...base": "...",
"emoji": "❤️",
"targetMessageId": "3EB0ABCDEF123456",
"isRemoved": false
}
}message.poll_created - Enquete recebida
{
"event": "message.poll_created",
"data": {
"...base": "...",
"pollName": "Qual o melhor sabor?",
"options": ["Chocolate", "Morango", "Baunilha"]
}
}message.poll_vote - Voto em enquete
{
"event": "message.poll_vote",
"data": {
"...base": "...",
"pollId": "3EB0ABCDEF123456",
"selectedOptions": ["Chocolate"]
}
}message.button_reply - Clique em botão
{
"event": "message.button_reply",
"data": {
"...base": "...",
"buttonId": "opcao_sim",
"displayText": "Sim",
"type": "quick_reply"
}
}message.list_reply - Seleção em lista interativa
{
"event": "message.list_reply",
"data": {
"...base": "...",
"rowId": "1",
"title": "X-Burguer",
"description": "R$ 18,90"
}
}message.deleted - Mensagem apagada pelo remetente
{
"event": "message.deleted",
"data": {
"...base": "..."
}
}message.unknown - Tipo não mapeado
{
"event": "message.unknown",
"data": {
"...base": "...",
"rawType": "senderKeyDistributionMessage"
}
}message.undecryptable - Mensagem não descriptografável
{
"event": "message.undecryptable",
"data": {
"...base": "..."
}
}📤 Mensagens Enviadas · 4 eventos
message.sent - Mensagem enviada (manual)
{
"event": "message.sent",
"data": {
"to": "5511999999999",
"type": "text",
"messageId": "3EB0ABCDEF123456"
}
}message.delivered - Mensagem entregue ao destinatário (receipt type 1)
{
"event": "message.delivered",
"data": {
"from": "5511999999999",
"messageId": "3EB0ABCDEF123456"
}
}message.read - Mensagem lida pelo destinatário (receipt type 4)
{
"event": "message.read",
"data": {
"from": "5511999999999",
"messageId": "3EB0ABCDEF123456"
}
}message.receipt - Outros tipos de confirmação (receipt types 2, 3, 5+)
{
"event": "message.receipt",
"data": {
"from": "5511999999999",
"messageId": "3EB0ABCDEF123456",
"receiptType": 2
}
}🔗 Conexão · 11 eventos
connection.connected - WhatsApp conectado
{
"event": "connection.connected",
"data": {
"phone": "5511999999999"
}
}connection.disconnected - WhatsApp desconectado
{
"event": "connection.disconnected",
"data": {}
}connection.qr_ready - QR Code gerado
{
"event": "connection.qr_ready",
"data": {
"qr": "2@abc123..."
}
}connection.pair_code - Código de pareamento gerado
{
"event": "connection.pair_code",
"data": {
"code": "NR62-NZSF"
}
}connection.pair_status - Status do pareamento
{
"event": "connection.pair_status",
"data": {
"status": "waiting",
"phone": "5511999999999"
}
}connection.logged_out - Sessão encerrada remotamente
{
"event": "connection.logged_out",
"data": {}
}connection.connect_failure - Falha na conexão
{
"event": "connection.connect_failure",
"data": {
"reason": "network_error"
}
}connection.stream_error - Erro no stream
{
"event": "connection.stream_error",
"data": {
"error": "connection closed"
}
}connection.temporary_ban - Ban temporário
{
"event": "connection.temporary_ban",
"data": {
"phone": "5511999999999"
}
}connection.client_outdated - Cliente desatualizado
{
"event": "connection.client_outdated",
"data": {}
}connection.stream_replaced - Stream substituído
{
"event": "connection.stream_replaced",
"data": {}
}👥 Grupo · 2 eventos
group.join - Novo membro entrou no grupo
{
"event": "group.join",
"data": {
"groupId": "5511999999999-123456@g.us",
"inviter": "5511888888888",
"member": "5511999999999"
}
}group.update - Grupo atualizado
{
"event": "group.update",
"data": {
"groupId": "5511999999999-123456@g.us",
"name": "Novo Nome",
"updatedBy": "5511888888888"
}
}👤 Contato / Presença · 4 eventos
contact.presence - Status de presença do contato
{
"event": "contact.presence",
"data": {
"from": "5511999999999@s.whatsapp.net",
"presence": "available",
"lastSeen": 1700000000
}
}contact.chat_presence - Status de digitação
{
"event": "contact.chat_presence",
"data": {
"from": "5511999999999@s.whatsapp.net",
"presence": "composing",
"mediaType": 0
}
}contact.picture_change - Foto de perfil alterada
{
"event": "contact.picture_change",
"data": {
"from": "5511999999999@s.whatsapp.net",
"pictureId": "abc123"
}
}contact.identity_change - Chave de segurança alterada
{
"event": "contact.identity_change",
"data": {
"from": "5511999999999@s.whatsapp.net"
}
}📞 Chamada · 3 eventos
call.received - Chamada recebida
{
"event": "call.received",
"data": {
"from": "5511999999999",
"fromJid": "5511999999999@s.whatsapp.net",
"callId": "ABC123DEF456"
}
}call.accepted - Chamada aceita
{
"event": "call.accepted",
"data": {
"from": "5511999999999",
"callId": "ABC123DEF456"
}
}call.terminated - Chamada encerrada
{
"event": "call.terminated",
"data": {
"from": "5511999999999",
"callId": "ABC123DEF456",
"reason": "timeout"
}
}Coloque sua API profissional de WhatsApp no ar em menos de 5 minutos com a ZapUnlocked-API.
Ideal para desenvolvimento, testes ou rodar em servidor próprio.
flowchart LR
A[Clone] --> B[Install]
B --> C[Config .env]
C --> D[Run 🚀]
D --> E[Config Account 🔗]
E --> F[Production! ⚡]
1. Clone o Repositório
git clone https://github.com/kauafpssx/ZapUnlocked-API.git
cd ZapUnlocked-API2. Instale as Dependências
| Sistema | Comando |
|---|---|
| 🪟 Windows | scripts\install\install.bat |
| 🐧 Linux / macOS | bash scripts/install/install.sh |
3. Configure o Ambiente
| Sistema | Comando |
|---|---|
| 🪟 Windows | scripts\generate-env\generate-env.bat |
| 🐧 Linux / macOS | bash scripts/generate-env/generate-env.sh |
| Variável | Descrição |
|---|---|
API_KEY |
Senha para autenticação em todos os endpoints |
INTERNAL_SECRET |
Token para validar assinaturas de webhook |
PORT |
Porta da API (padrão: 8300) |
4. Execute a API
| Sistema | Comando |
|---|---|
| 🪟 Windows | scripts\run\run.bat |
| 🐧 Linux / macOS | bash scripts/run/run.sh |
A Alwaysdata é a opção recomendada para hospedar a API de forma estável e gratuita sem precisar manter um servidor ligado.
| Recurso | Disponível no Free |
|---|---|
| 💾 Armazenamento | 1 GB SSD |
| 🧠 RAM | 256 MB |
| ⚡ CPU | 1/4 vCPU |
| 🔄 Backup | 3 dias automático |
| 📡 Uptime | 24/7 via Services |
1. Crie sua conta em Alwaysdata.com · plano Free.
2. Acesse o SSH em https://ssh-[usuario].alwaysdata.net.
3. Clone e instale:
git clone https://github.com/kauafpssx/ZapUnlocked-API.git ~/ZapUnlocked-API
cd ~/ZapUnlocked-API
bash scripts/install/install.sh4. (Opcional) Gere o .env:
bash scripts/generate-env/generate-env.shNote
O script de instalação já pergunta se deseja configurar o .env. Se respondeu sim, este passo pode ser pulado. Caso contrário, execute o comando acima ou configure o .env manualmente.
5. Configure o Serviço (24/7) em Advanced › Services › Add a service:
| Campo | Valor |
|---|---|
| Command | bash scripts/run/run.sh |
| Working directory | ZapUnlocked-API |
| Environment variables | PORT=8300 |
6. Acesse via:
http://services-[usuario].alwaysdata.net:8300/
Tip
A URL já é acessível externamente. (Opcional) Para usar um domínio personalizado, configure um Reverse Proxy em Web › Sites › Add a site apontando para http://[usuario].alwaysdata.net.
Após o deploy, conecte sua conta do WhatsApp acessando no navegador:
http://services-[usuario].alwaysdata.net:8300/qr?API_KEY=SUA_SENHA_SECRETA
👉 zapunlocked-api.kauafpss.com.br
Para documentação técnica detalhada, exemplos de código e playground interativo, acesse nosso site oficial.
Tip
Use o LLMs.txt como índice para IA: zapunlocked-api.kauafpss.com.br/llms.txt. Descubra todas as páginas antes de explorar.
| Projeto | Descrição |
|---|---|
| Biblioteca Python para conexão nativa com o WhatsApp Web | |
| Biblioteca Go base do Neonize · o coração da conexão | |
| Infraestrutura gratuita de alta qualidade |
Este projeto é licenciado sob a Licença MIT.
Feito com 💜 por Kauã Ferreira
