Turbine sua comunicação via WhatsApp.
Nossa API REST foi desenhada para facilitar integrações complexas. Automatize notificações, lembretes de pagamento e fluxos de atendimento com segurança de nível empresarial.
Base Endpoint (SSL Required)
https://zap.mago3.com.br/api.php
Segurança & Autenticação
Bearer Token
Padrão via Header HTTP. Recomendado para maior segurança em ambientes configurados.
JSON Payload
Envio da api_key dentro do corpo JSON. Mais estável em servidores Apache/CPanel.
TLS 1.3
Toda comunicação é criptografada de ponta a ponta via HTTPS.
Método 1: Header HTTP
Authorization: Bearer SUA_API_KEY
Método 2: JSON (Garante Funcionamento)
{
"api_key": "SUA_API_KEY",
"action": "...",
"..."
}
Proteção Anti-Ban Ativa
Diferente de APIs genéricas, nosso motor processa cada mensagem com inteligência de segurança integrada. Sua conta está protegida por 3 camadas exclusivas:
Inteligência Spintax
Suporte a variações {A|B} para evitar padrões robóticos.
Cooldown de Segurança (48h)
Bloqueio automático de mensagens idênticas para o mesmo número.
Simulação Humana
Status "Digitando..." e delays aleatórios em todos os envios.
Payload "message":
"{Boa tarde|Olá|Oi} {contato}! Seu pedido está {a caminho|sendo entregue}."
Resultado Aleatório:
"Olá João! Seu pedido está a caminho."
Enviar Mensagem
Endpoint principal para disparos individuais com simulação humana.
/api.php
Parâmetros Obrigatórios (Payload Principal)
| Campo | Valor/Tipo | Descrição Detalhada |
|---|---|---|
| action | send_message | Ação obrigatória para iniciar o processo de envio. |
| instance | string | Nome da instância que realizará o envio (deve estar Connected). |
| number | string | DDI + DDD + Número. Formato: 5511999887766. |
| message | string | O texto da mensagem. Suporta emojis e Spintax. |
Todos os Parâmetros Suportados
| Parâmetro | Tipo | Obrigatório | Descrição e Regras |
|---|---|---|---|
| template_id | integer | Opcional | Se enviado, ignora o campo message e usa um template do painel. |
| vars | object | Opcional | Variáveis para substituição: {"cliente": "Carlos"}. |
| scheduled_at | datetime | Opcional | Data/Hora para envio programado (Y-m-d H:i:s). |
| close_session | boolean | Opcional | Se 1, fecha a janela de chat no painel após o envio. |
| fura_fila | boolean | PRIORIDADE | Ignora a fila de espera e envia imediatamente (Consome 2 créditos). |
| image_url | string | Opcional | URL pública direta da imagem a ser enviada (ex: https://site.com/imagem.png). |
{
"api_key": "SUA_API_KEY",
"action": "send_message",
"instance": "vendas01",
"number": "5511999998877",
"message": "{Olá|Oi} {nome}! Tudo bem?",
"vars": { "nome": "Carlos" },
"image_url": "https://site.com/imagem.png",
"schedule_enabled": 1
}
Dica de Alta Performance
Para integrações de larga escala, recomendamos o uso da propriedade fura_fila: true apenas para alertas críticos ou autenticação (2FA).
Simulação de Digitação Ativa por Padrão
Envio em Lote (Batch)
Dispare para múltiplos contatos em uma única chamada.
A API agora aceita o array contacts.
Ao enviar este array, o sistema processa cada contato individualmente, aplicando as variáveis específicas de cada um e personalizando a mensagem final.
| Propriedade do Contato | Tipo | Descrição |
|---|---|---|
| number | string | Número de destino (DDI + DDD + Número). |
| name | string | Nome opcional para exibição no sistema. |
| vars | object | Variáveis exclusivas deste número (ex: {"nome": "João"}). |
{
"api_key": "SUA_API_KEY",
"action": "send_message",
"instance": "Minha_Instancia",
"message": "{Olá|Oi} {nome}, seu pedido foi aprovado!",
"contacts": [
{
"number": "5511999990001",
"name": "Maria Silva",
"vars": { "nome": "Maria" }
},
{
"number": "5511999990002",
"name": "João Souza",
"vars": { "nome": "João" }
},
{
"number": "5511999990003",
"name": "Ana Costa",
"vars": { "nome": "Ana" }
}
],
"close_session": 1
}
Histórico de Sessão
Polling de Mensagens
Retorne o histórico de uma sessão aberta. Você pode sincronizar as conversas do seu CRM usando o parâmetro after_id.
?action=get_chat_history&number=...
GET /api.php?action=get_chat_history&number=5511999998877
Saldo & Créditos
Consulte o saldo atual do usuário autenticado para exibir no seu painel externo ou controlar limites de disparo.
GET /api.php?action=get_credits
Exemplo de Retorno
Mensagens restantes
Instâncias
Retorna todas as instâncias do usuário e seus respectivos status de conexão. Útil para validar se um bot pode disparar ou se o QR Code desconectou.
GET /api.php?action=list_instances
Webhook Externo
Receba mensagens recebidas em seu servidor (Integração com IA).
Sempre que uma mensagem é recebida em sua instância, nosso sistema pode disparar um POST JSON automático para uma URL externa. Ideal para conectar com motores de Inteligência Artificial ou CRMs próprios.
| Campo | Descrição |
|---|---|
| event | Tipo de evento. Valor fixo: message_received. |
| instance | Nome da instância que recebeu a mensagem. |
| number | Número do remetente (incluindo DDI). |
| message | Conteúdo textual da mensagem. Retorna null quando o tipo não é texto (ex: áudio, imagem). |
| messageType | Tipo da mensagem recebida. Valores possíveis: text, audio, image, video, document, sticker. |
| timestamp | Data e Hora do recebimento no formato Y-m-d H:i:s. |
Tipos de Mensagem Suportados
O webhook notifica sobre todos os tipos de mensagem. O campo messageType identifica o tipo recebido. Para mídias, message retorna null.
text
Mensagem de texto simples ou formatada.
audio
Áudio ou mensagem de voz (PTT).
image
Foto ou imagem enviada.
video
Vídeo enviado pelo contato.
document
PDF, planilha ou outro documento.
sticker
Figurinha/sticker (adesivo).
Importante: Mensagens de áudio são baixadas automaticamente pelo nosso servidor e o link direto do arquivo `.ogg` é fornecido no campo message para fácil transcrição (ex: com OpenAI Whisper). Para os demais tipos de mídia (imagem, vídeo, documento, sticker), apenas a notificação do tipo é enviada no momento.
Dica para IA
Após processar a mensagem com sua IA, você deve responder ao usuário utilizando o endpoint send_message documentado acima.
// Mensagem de texto
{
"event": "message_received",
"instance": "vendas_01",
"number": "5511999998877",
"message": "Olá, gostaria de saber mais.",
"messageType": "text",
"timestamp": "2024-03-27 15:30:45"
}
// Mensagem de áudio
{
"event": "message_received",
"instance": "vendas_01",
"number": "5511999998877",
"message": "https://zap.mago3.com.br/assets/uploads/audios/1234567890ABCDEF.ogg",
"messageType": "audio",
"timestamp": "2024-03-27 15:31:12"
}
Conectar WhatsApp & Gerar QR Code na sua Loja Virtual
Você pode criar a instância, exibir o QR Code e monitorar a conexão do WhatsApp diretamente dentro da sua loja virtual ou plataforma SaaS, sem que você ou os seus lojistas precisem acessar o painel do ZapSender.
Como integrar com Plataformas de Lojas Virtuais:
1. Em Minha API, gere uma Chave da Plataforma de Lojas e insira-a no Superadmin da sua plataforma de e-commerce.
2. Quando um cliente lojista ativar o plugin na loja dele, seu sistema chama create_instance passando o identificador da loja (ex: loja_45).
3. Todas as instâncias criadas com a Chave de Loja são automaticamente separadas na tela Lojas Virtuais do ZapSender, mantendo suas instâncias pessoais totalmente isoladas.
action: create_instance
Cria a sessão de WhatsApp da sua loja. Você pode definir um nome identificador para a instância (ex: loja, notificacoes).
Parâmetros (JSON Body)
| instance_name | Nome identificador da instância (Opcional, padrão: loja). Apenas letras, números e traço. |
$ch = curl_init("https://zap.mago3.com.br/api.php");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer SUA_API_KEY",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => json_encode([
"action" => "create_instance",
"instance_name" => "loja"
])
]);
$response = json_decode(curl_exec($ch), true);
// Salve $response['instance_name'] para usar nos próximos passos
{
"status": "success",
"message": "Instância criada com sucesso!",
"instance_name": "u12_loja"
}
action: get_qrcode
Gera o QR Code de autenticação do WhatsApp. O sistema retorna o QR Code já codificado em Base64 para você desenhar diretamente em uma tag <img src="data:image/png;base64,..."> na tela de configurações da sua loja virtual.
Parâmetros (JSON Body)
| instance | Nome da instância (Opcional: se omitido, o sistema seleciona automaticamente a sua primeira instância ativa). |
const res = await fetch("https://zap.mago3.com.br/api.php", {
method: "POST",
headers: {
"Authorization": "Bearer SUA_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({ action: "get_qrcode" })
});
const data = await res.json();
if (data.connected) {
alert("WhatsApp já está conectado!");
} else if (data.qrcode_base64) {
// Exibe a imagem do QR Code na tela da sua loja:
document.getElementById("qr-code-img").src = data.qrcode_base64;
}
{
"status": "success",
"connected": false,
"state": "connecting",
"instance": "u12_loja",
"qrcode_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"code": "2@qP9...==,5WqX..."
}
action: get_instance_status
Verifica em tempo real se o WhatsApp foi conectado com sucesso após o escaneamento do QR Code. Ideal para executar polling a cada 3 segundos enquanto a tela de conexão estiver aberta.
const interval = setInterval(async () => {
const res = await fetch("https://zap.mago3.com.br/api.php", {
method: "POST",
headers: {
"Authorization": "Bearer SUA_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({ action: "get_instance_status" })
});
const data = await res.json();
if (data.connected && data.state === "open") {
clearInterval(interval);
alert("WhatsApp conectado com sucesso pelo número: " + data.owner_jid);
}
}, 3000);
{
"status": "success",
"instance": "u12_loja",
"state": "open",
"connected": true,
"owner_jid": "5511999998877@s.whatsapp.net"
}
action: disconnect_instance
Desconecta o WhatsApp da instância caso você queira deslogar o número ou escanear um novo aparelho.
curl -X POST "https://zap.mago3.com.br/api.php" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action": "disconnect_instance"}'
{
"status": "success",
"message": "Instância desconectada com sucesso."
}