Documentação da API

Integre o SendZap com qualquer sistema usando nossa API RESTful. Envie mensagens, botões, carrosséis e cobranças PIX.

Crie sua conta grátis para obter sua API Key e começar a integrar. Cadastre-se agora →

URL Base: https://use.sendzap.online/api

Autenticação: Authorization: Bearer SUA_API_KEY

Faça login para ver sua API Key Login
Múltiplas Sessões

O sistema suporta múltiplas sessões por usuário. Cada sessão representa um número de WhatsApp diferente.

Use o parâmetro sessionName para especificar qual sessão utilizar. Se não especificado, usa "default".

Exemplos de nomes: vendas, suporte, marketing, default

GET /health - Verificar se API está online
curl -X GET https://use.sendzap.online/api/health
Resposta:
{
  "success": true,
  "message": "API WhatsApp está funcionando"
}
POST /auth/login - Autenticar e obter API Key
curl -X POST https://use.sendzap.online/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "seu@email.com",
    "password": "sua_senha"
  }'
Resposta:
{
  "success": true,
  "user": {
    "id": 1,
    "name": "Seu Nome",
    "email": "seu@email.com",
    "api_key": "wapi_sua_api_key_aqui"
  }
}
POST /whatsapp/connect - Conectar WhatsApp (gerar QR Code)
ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
# Conectar sessão padrão
curl -X POST https://use.sendzap.online/api/whatsapp/connect \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "default"
  }'

# Conectar sessão de vendas
curl -X POST https://use.sendzap.online/api/whatsapp/connect \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "vendas"
  }'
Resposta:
{
  "success": true,
  "message": "Sessão iniciada, aguardando QR Code",
  "status": "connecting"
}
GET /whatsapp/status - Verificar status da conexão
QueryTipoDescrição
sessionNamestringNome da sessão (padrão: "default")
# Status da sessão padrão
curl -X GET "https://use.sendzap.online/api/whatsapp/status?sessionName=default" \
  -H "Authorization: Bearer SUA_API_KEY"

# Status da sessão de vendas
curl -X GET "https://use.sendzap.online/api/whatsapp/status?sessionName=vendas" \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "status": "connected",
  "phone": "5511999999999",
  "connected": true
}
GET /whatsapp/qrcode - Obter QR Code (base64)
QueryTipoDescrição
sessionNamestringNome da sessão (padrão: "default")
curl -X GET "https://use.sendzap.online/api/whatsapp/qrcode?sessionName=vendas" \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "qrCode": "data:image/png;base64,iVBORw0KGgo..."
}
POST /whatsapp/send - Enviar Mensagem PRINCIPAL
ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
phonestringSimNúmero com DDI+DDD (ex: 5511999999999)
messagestringSimTexto da mensagem
# Enviar pela sessão padrão
curl -X POST https://use.sendzap.online/api/whatsapp/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "message": "Olá! Esta é uma mensagem de teste."
  }'

# Enviar pela sessão de vendas
curl -X POST https://use.sendzap.online/api/whatsapp/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "vendas",
    "phone": "5511999999999",
    "message": "Olá! Aqui é a equipe de vendas."
  }'

# Enviar pela sessão de suporte
curl -X POST https://use.sendzap.online/api/whatsapp/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "suporte",
    "phone": "5511999999999",
    "message": "Olá! Aqui é o suporte técnico."
  }'
Resposta Sucesso:
{
  "success": true,
  "message": "Mensagem enviada com sucesso",
  "messageId": "true_5511999999999@c.us_3EB0A7B4"
}
Resposta Erro:
{
  "success": false,
  "error": "WhatsApp não está conectado."
}
Disparo em Massa (Background)

Os disparos são processados em background. Você pode criar um disparo, fechar a página, e acompanhar o progresso depois. Suporta pausar, retomar e cancelar.

POST /whatsapp/send-bulk - Criar disparo em massa PRINCIPAL
ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
namestringNãoNome/identificador do disparo
messagestringSimMensagem a ser enviada
phonesarraySimLista de números (strings)
delaynumberNãoIntervalo em ms (padrão: 3000)
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "vendas",
    "name": "Campanha Black Friday",
    "message": "Aproveite nossas promocoes! Ate 50% de desconto.",
    "phones": ["5511999999999", "5511888888888", "5511777777777"],
    "delay": 5000
  }'
Resposta:
{
  "success": true,
  "message": "Disparo criado com sucesso. Processamento iniciado em background.",
  "dispatchId": 1,
  "totalNumbers": 3
}
GET /whatsapp/send-bulk/list - Listar todos os disparos
QueryDescrição
pagePágina (padrão: 1)
limitItens por página (padrão: 20)
curl -X GET "https://use.sendzap.online/api/whatsapp/send-bulk/list?page=1&limit=10" \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "dispatches": [
    {
      "id": 1,
      "name": "Campanha Black Friday",
      "session_name": "vendas",
      "status": "processing",
      "total_numbers": 100,
      "sent_count": 45,
      "failed_count": 2,
      "pending_count": 53,
      "created_at": "2024-01-15 10:30:00"
    }
  ],
  "pagination": {"page": 1, "limit": 10, "total": 5, "totalPages": 1}
}
GET /whatsapp/send-bulk/:id - Status de um disparo específico
curl -X GET https://use.sendzap.online/api/whatsapp/send-bulk/1 \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "dispatch": {
    "id": 1,
    "name": "Campanha Black Friday",
    "message": "Aproveite nossas promocoes!",
    "status": "processing",
    "total_numbers": 100,
    "sent_count": 45,
    "failed_count": 2,
    "pending_count": 53,
    "progress": 47,
    "started_at": "2024-01-15 10:30:05",
    "recentItems": [...]
  }
}
GET /whatsapp/send-bulk/:id/items - Listar números de um disparo
QueryDescrição
pagePágina (padrão: 1)
limitItens por página (padrão: 50)
statusFiltrar: pending, sent, failed
curl -X GET "https://use.sendzap.online/api/whatsapp/send-bulk/1/items?status=failed" \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "items": [
    {"id": 1, "phone": "5511999999999", "status": "sent", "processed_at": "2024-01-15 10:30:10"},
    {"id": 2, "phone": "5511888888888", "status": "failed", "error_message": "Número inválido"}
  ],
  "pagination": {"page": 1, "limit": 50, "total": 100, "totalPages": 2}
}
POST /whatsapp/send-bulk/:id/pause - Pausar disparo
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk/1/pause \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "message": "Disparo pausado com sucesso"
}
POST /whatsapp/send-bulk/:id/resume - Retomar disparo pausado
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk/1/resume \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "message": "Disparo retomado com sucesso"
}
POST /whatsapp/send-bulk/:id/cancel - Cancelar disparo
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk/1/cancel \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "message": "Disparo cancelado com sucesso"
}

Mensagens com Botões Interativos
Botões Interativos

Envie mensagens com botões clicáveis que aumentam o engajamento. Suporta 5 tipos de botões:

  • reply - Resposta rápida
  • url - Abrir link
  • copy - Copiar código
  • call - Ligar
  • pix - Pagamento PIX
POST /whatsapp/send-buttons - Enviar Mensagem com Botões NOVO
ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
phonestringSimNúmero com DDI+DDD (ex: 5511999999999)
titlestringSimTítulo da mensagem (exibido em destaque)
messagestringSimTexto principal da mensagem
footerstringNãoRodapé da mensagem
buttonsarraySimLista de botões (máximo 3)
Tipos de Botões:
TipoCamposDescrição
replytext, idResposta rápida
urltext, urlAbre link no navegador
copytext, copyCodeCopia código para área de transferência
calltext, phoneNumberInicia chamada telefônica
pixkey, keyType*, amountPagamento PIX (enviado via novo formato sendPaymentOrder)

* keyType do PIX é auto-detectado se omitido. Valores: email, cpf, cnpj, phone, random. Campos opcionais do PIX: currency (padrão: "BRL"), name (beneficiário).

# Exemplo: botão de resposta + link + copiar código
curl -X POST https://use.sendzap.online/api/whatsapp/send-buttons \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "vendas",
    "phone": "5511999999999",
    "title": "Promoção Especial",
    "message": "Confira nossa oferta exclusiva! 50% de desconto.",
    "footer": "Válido até 30/01",
    "buttons": [
      {"type": "reply", "text": "Tenho interesse", "id": "btn_interesse"},
      {"type": "url", "text": "Ver Produtos", "url": "https://meusite.com/promo"},
      {"type": "copy", "text": "Copiar Cupom", "copyCode": "PROMO50"}
    ]
  }'

# Exemplo: botão de ligar
curl -X POST https://use.sendzap.online/api/whatsapp/send-buttons \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "title": "Suporte Técnico",
    "message": "Precisa de ajuda? Fale conosco!",
    "buttons": [
      {"type": "reply", "text": "Abrir Ticket", "id": "btn_ticket"},
      {"type": "call", "text": "Ligar Agora", "phoneNumber": "5511988887777"}
    ]
  }'
Resposta Sucesso:
{
  "success": true,
  "message": "Mensagem com botões enviada com sucesso",
  "messageId": "true_5511999999999@c.us_3EB0A7B4"
}
POST /whatsapp/send-bulk-buttons - Disparo em massa com botões NOVO
ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
namestringSimNome/identificador do disparo
titlestringSimTítulo da mensagem com botões
messagestringSimTexto principal da mensagem
footerstringNãoRodapé da mensagem
contactsarraySimLista de contatos com phone e name
buttonsarraySimLista de botões (máximo 3, mesmos tipos acima)
delayMsnumberNãoIntervalo entre envios em ms (padrão: 3000)
batchEnabledbooleanNãoAtivar envio em lotes
batchSizenumberNãoTamanho do lote (padrão: 50)
batchDelaynumberNãoPausa entre lotes em ms (padrão: 60000)
# Campanha com botões para múltiplos contatos
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk-buttons \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "marketing",
    "name": "Campanha Black Friday",
    "title": "Black Friday!",
    "message": "Aproveite 70% OFF em toda a loja!",
    "footer": "Oferta por tempo limitado",
    "contacts": [
      {"phone": "5511999999999", "name": "João Silva"},
      {"phone": "5511888888888", "name": "Maria Santos"},
      {"phone": "5511777777777", "name": "Pedro Oliveira"}
    ],
    "buttons": [
      {"type": "url", "text": "Ver Ofertas", "url": "https://meusite.com/bf"},
      {"type": "copy", "text": "Copiar Cupom", "copyCode": "BLACK70"},
      {"type": "reply", "text": "Quero saber mais", "id": "btn_info"}
    ],
    "delayMs": 5000,
    "batchEnabled": true,
    "batchSize": 50,
    "batchDelay": 60000
  }'

# Cobrança via PIX em massa
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk-buttons \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "name": "Cobrança Mensal",
    "title": "Fatura Disponível",
    "message": "Sua fatura está pronta. Pague via PIX com desconto!",
    "contacts": [
      {"phone": "5511999999999", "name": "Cliente 1"},
      {"phone": "5511888888888", "name": "Cliente 2"}
    ],
    "buttons": [
      {"type": "pix", "key": "financeiro@empresa.com", "amount": 5000}
    ],
    "delayMs": 3000
  }'

Nota: Botões do tipo pix são automaticamente enviados via o novo formato sendPaymentOrder da Evolution API. O campo amount é em centavos (5000 = R$ 50,00).

Resposta:
{
  "success": true,
  "message": "Disparo com botões criado com sucesso",
  "dispatchId": 15,
  "totalContacts": 3,
  "estimatedTime": "15 segundos"
}

Envio de Mídia (Imagem, Vídeo, Áudio, Documento)
POST /whatsapp/send-media - Enviar mídia individual NOVO

Envia imagem, vídeo, áudio ou documento para um número. Aceita URL pública ou base64.

ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
phonestringSimNúmero com DDI+DDD (ex: 5511999999999)
mediatypestringSimimage, video, audio ou document
mediastring*URL pública acessível da mídia
mediaBase64string*Base64 com data URI (ex: data:image/png;base64,...)
filearquivo*Upload direto via multipart/form-data. Use media, mediaBase64 OU file
captionstringNãoLegenda que acompanha a mídia (até 1024 caracteres). Para audio, o WhatsApp não exibe legenda — o texto é entregue como mensagem separada logo após o áudio
fileNamestringNãoNome do arquivo exibido no WhatsApp
asVoiceboolNãoCom mediatype: "audio", envia como mensagem de voz (PTT) em vez de arquivo
# Enviar imagem por URL
curl -X POST https://use.sendzap.online/api/whatsapp/send-media \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "vendas",
    "phone": "5511999999999",
    "mediatype": "image",
    "media": "https://meusite.com/banner.jpg",
    "caption": "Confira nossa promoção de Black Friday! 🎉"
  }'

# Enviar PDF por URL
curl -X POST https://use.sendzap.online/api/whatsapp/send-media \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "mediatype": "document",
    "media": "https://meusite.com/catalogo.pdf",
    "caption": "Segue nosso catálogo completo",
    "fileName": "Catalogo2025.pdf"
  }'

# Enviar imagem em base64
curl -X POST https://use.sendzap.online/api/whatsapp/send-media \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "mediatype": "image",
    "mediaBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
    "caption": "Imagem enviada do servidor"
  }'
Resposta:
{
  "success": true,
  "message": "Mídia enviada com sucesso",
  "messageId": "BAE5A75CB0F39712"
}
POST /whatsapp/send-bulk-media - Disparo em massa com mídia NOVO

Cria um disparo em massa enviando mídia (imagem, vídeo, documento, áudio) para uma lista de contatos. Processa em background.

ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão
namestringNãoNome da campanha
contactsarray*Array de objetos {"phone":"55...", "name":"João"}
phonesarray*Array simples de telefones (alternativa a contacts)
mediatypestringSimimage, video, audio, document
mediastring*URL pública da mídia
mediaBase64string*Base64 com data URI. Use media OU mediaBase64
captionstringNãoLegenda. Suporta variáveis: {{nome}}, {{primeiro_nome}}, {{telefone}}
fileNamestringNãoNome do arquivo
asVoiceboolNãoCom mediatype: "audio", cada contato recebe como mensagem de voz (PTT) em vez de arquivo
delayMsnumberNãoIntervalo entre envios em ms (padrão: 3000)
batchEnabledboolNãoAtivar disparo em lotes
batchSizenumberNãoTamanho do lote (padrão: 50)
batchDelaynumberNãoPausa entre lotes em ms (padrão: 60000)
nightPauseEnabledboolNãoAtivar pausa noturna
nightPauseStartstringNãoHorário de pausa (ex: "22:00")
nightPauseEndstringNãoHorário de retomada (ex: "08:00")
# Disparo de imagem por URL com legenda personalizada
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk-media \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "marketing",
    "name": "Campanha Black Friday",
    "contacts": [
      {"phone": "5511999999999", "name": "Maria"},
      {"phone": "5511888888888", "name": "João"}
    ],
    "mediatype": "image",
    "media": "https://meusite.com/banner-bf.jpg",
    "caption": "Olá {{nome}}! 🎉 Black Friday com até 70% OFF. Garanta já o seu!",
    "delayMs": 15000,
    "batchEnabled": true,
    "batchSize": 10,
    "batchDelay": 300000
  }'

# Disparo de PDF
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk-media \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "name": "Envio Catalogo",
    "phones": ["5511999999999", "5511888888888"],
    "mediatype": "document",
    "media": "https://meusite.com/catalogo.pdf",
    "caption": "Segue o catálogo com nossos produtos",
    "fileName": "Catalogo2025.pdf",
    "delayMs": 20000
  }'
Resposta:
{
  "success": true,
  "message": "Disparo de mídia criado com sucesso.",
  "dispatchId": 42,
  "totalNumbers": 150,
  "mediatype": "image"
}

O disparo processa em background. Use GET /whatsapp/send-bulk/:id para acompanhar o progresso. Recomendação: prefira sempre URL pública para vídeos — base64 de vídeos ocupa muito espaço no banco de dados.


Áudio e Mensagem de Voz (PTT)
POST /whatsapp/send-audio - Enviar áudio / mensagem de voz NOVO

Envia áudio para um número. Por padrão chega como mensagem de voz (PTT) — com ícone de microfone e forma de onda, como se tivesse sido gravada na hora, e o destinatário vê "gravando áudio..." antes de receber. O áudio é convertido automaticamente para o formato nativo do WhatsApp (ogg/opus), então você pode enviar mp3, wav, m4a, ogg ou opus.

ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
phonestringSimNúmero com DDI+DDD (ex: 5511999999999)
audiostring*URL pública do áudio
audioBase64string*Base64 com data URI (ex: data:audio/mpeg;base64,...)
filearquivo*Upload direto do arquivo via multipart/form-data. Use audio, audioBase64 OU file
audioTypestringNão"recorded" (padrão) = chega como áudio gravado na hora (PTT, microfone + forma de onda). "file" = chega como arquivo de áudio (player de música)
captionstringNãoO WhatsApp não exibe legenda em áudio — o texto é enviado como mensagem separada logo após o áudio
# Áudio GRAVADO (PTT) por URL — comportamento padrão
curl -X POST https://use.sendzap.online/api/whatsapp/send-audio \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "vendas",
    "phone": "5511999999999",
    "audio": "https://meusite.com/boas-vindas.mp3",
    "audioType": "recorded"
  }'

# Áudio como ARQUIVO (player de música, não voz)
curl -X POST https://use.sendzap.online/api/whatsapp/send-audio \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "audio": "https://meusite.com/podcast-ep1.mp3",
    "audioType": "file"
  }'

# Upload direto do arquivo (multipart/form-data — sem precisar de URL nem base64)
curl -X POST https://use.sendzap.online/api/whatsapp/send-audio \
  -H "Authorization: Bearer SUA_API_KEY" \
  -F "phone=5511999999999" \
  -F "audioType=recorded" \
  -F "file=@/caminho/do/audio.mp3"

# Áudio gravado em base64
curl -X POST https://use.sendzap.online/api/whatsapp/send-audio \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "audioBase64": "data:audio/mpeg;base64,SUQzBAAAAAAA..."
  }'
Resposta:
{
  "success": true,
  "message": "Mídia enviada com sucesso",
  "messageId": "BAE5A75CB0F39712"
}

O campo asVoice (bool) continua aceito como alternativa ao audioType. Tamanho máximo: 50MB no upload; recomendado até 16MB (limite do WhatsApp para áudio).

POST /whatsapp/send-bulk-audio - Disparo de áudio em massa NOVO

Cria um disparo em massa de áudio para uma lista de contatos. Por padrão cada contato recebe como mensagem de voz (PTT). Processa em background com os mesmos controles do disparo de mídia: delay entre envios, lotes e pausa noturna.

ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão
namestringNãoNome da campanha
contactsarray*Array de objetos {"phone":"55...", "name":"João"}
phonesarray*Array simples de telefones (alternativa a contacts)
audiostring*URL pública do áudio (recomendado para listas grandes)
audioBase64string*Base64 com data URI. Use audio OU audioBase64
audioTypestringNão"recorded" (padrão) = áudio gravado (PTT). "file" = arquivo de áudio
captionstringNãoTexto enviado após o áudio. Suporta {{nome}}, {{primeiro_nome}}, {{telefone}}
delayMsnumberNãoIntervalo entre envios em ms (padrão: 3000)
batchEnabled / batchSize / batchDelayNãoDisparo em lotes (mesmos parâmetros do send-bulk-media)
nightPauseEnabled / nightPauseStart / nightPauseEndNãoPausa noturna (mesmos parâmetros do send-bulk-media)
# Disparo de mensagem de voz com texto complementar
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk-audio \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "marketing",
    "name": "Convite em Audio",
    "contacts": [
      {"phone": "5511999999999", "name": "Maria"},
      {"phone": "5511888888888", "name": "João"}
    ],
    "audio": "https://meusite.com/convite.mp3",
    "caption": "Olá {{nome}}! Ouça o convite especial que gravamos para você 🎧",
    "delayMs": 15000
  }'
Resposta:
{
  "success": true,
  "message": "Disparo de mídia criado com sucesso.",
  "dispatchId": 43,
  "totalNumbers": 2,
  "mediatype": "audio"
}

Recomendação: para listas grandes use sempre audio (URL pública) em vez de base64 — o base64 fica armazenado no banco e é reprocessado a cada contato.


Imagem + Texto + Botões Interativos
POST /whatsapp/send-media-buttons - Imagem + texto + botões NOVO

Envia uma mensagem rica com imagem (opcional), texto, título, rodapé e até 3 botões interativos: resposta rápida, abrir link, ligar ou copiar código. Sem imagem, envia texto + botões.

ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
phonestringSimNúmero com DDI+DDD
imageUrlstringNãoURL pública da imagem
imageBase64stringNãoImagem em base64 com data URI (ex: data:image/png;base64,...)
captionstringSimTexto do corpo da mensagem
titlestringNãoTítulo em negrito acima do texto
footerstringNãoRodapé em fonte menor
buttonsarraySim1 a 3 botões (veja estrutura abaixo)

Estrutura de cada botão:

typeCamposAção
replytextResposta rápida — envia o texto do botão de volta
urltext, urlAbre o link no navegador
calltext, phoneNumberInicia uma ligação para o número
copytext, copyCodeCopia o código para a área de transferência (ex: cupom)
Limites de texto do WhatsApp: texto do botão (text) até 25 caracteres (acima disso é cortado automaticamente); title e footer recomendados até 60 caracteres; caption até 1024 caracteres.
# Imagem por URL + 3 botões
curl -X POST https://use.sendzap.online/api/whatsapp/send-media-buttons \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "vendas",
    "phone": "5511999999999",
    "imageUrl": "https://meusite.com/banner.jpg",
    "title": "Promoção Especial",
    "caption": "Aproveite 50% OFF em todos os produtos até domingo!",
    "footer": "Powered by SendZap",
    "buttons": [
      {"type": "url",   "text": "Ver Ofertas",  "url": "https://meusite.com/ofertas"},
      {"type": "copy",  "text": "Copiar Cupom", "copyCode": "DESCONTO50"},
      {"type": "reply", "text": "Falar com Vendedor"}
    ]
  }'

# Imagem em base64 (upload direto, sem hospedar)
curl -X POST https://use.sendzap.online/api/whatsapp/send-media-buttons \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "imageBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
    "caption": "Confira o catálogo desta semana!",
    "buttons": [
      {"type": "call", "text": "Ligar Agora", "phoneNumber": "5511988887777"}
    ]
  }'
Resposta:
{
  "success": true,
  "message": "Mensagem enviada com sucesso",
  "messageId": "BAE5A75CB0F39712"
}
POST /whatsapp/send-bulk-media-buttons - Disparo em massa de imagem + botões NOVO

Cria um disparo em massa de imagem + texto + botões interativos. Processa em background com delay entre envios, lotes e pausa noturna.

ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão
namestringNãoNome da campanha
contactsarray*Array de objetos {"phone":"55...", "name":"João"}
phonesarray*Array simples de telefones (alternativa a contacts)
imageUrlstringNãoURL pública da imagem (recomendado para listas grandes)
imageBase64stringNãoImagem em base64 com data URI
captionstringSimTexto do corpo. Suporta {{nome}}, {{primeiro_nome}}, {{telefone}}
title / footerstringNãoTítulo e rodapé
buttonsarraySim1 a 3 botões (mesma estrutura do send-media-buttons)
delayMsnumberNãoIntervalo entre envios em ms (padrão: 3000)
batchEnabled / batchSize / batchDelayNãoDisparo em lotes
nightPauseEnabled / nightPauseStart / nightPauseEndNãoPausa noturna
curl -X POST https://use.sendzap.online/api/whatsapp/send-bulk-media-buttons \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "marketing",
    "name": "Campanha Cupom",
    "contacts": [
      {"phone": "5511999999999", "name": "Maria"},
      {"phone": "5511888888888", "name": "João"}
    ],
    "imageUrl": "https://meusite.com/banner-cupom.jpg",
    "title": "Oferta Exclusiva",
    "caption": "Olá {{nome}}! Liberamos um cupom exclusivo para você 🎁",
    "footer": "Válido até domingo",
    "buttons": [
      {"type": "url",  "text": "Comprar Agora", "url": "https://meusite.com/loja"},
      {"type": "copy", "text": "Copiar Cupom",  "copyCode": "VIP20"}
    ],
    "delayMs": 15000,
    "batchEnabled": true,
    "batchSize": 20,
    "batchDelay": 120000
  }'
Resposta:
{
  "success": true,
  "message": "Disparo Imagem+Botões criado com sucesso.",
  "dispatchId": 44,
  "totalNumbers": 2
}

Acompanhe o progresso com GET /whatsapp/send-bulk/:id.


Pagamentos e Mensagens Avançadas
POST /whatsapp/send-pix - Enviar PIX (novo formato) NOVO

Envia um pagamento PIX usando o novo formato sendPaymentOrder da Evolution API. Gera um botão nativo de pagamento no WhatsApp.

ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
phonestringSimNúmero com DDI+DDD
pixKeystringSimChave PIX (e-mail, CPF, CNPJ, telefone ou aleatória)
keyTypestringNãoTipo da chave: email, cpf, cnpj, phone, random (auto-detectado se omitido)
amountnumberNãoValor em centavos (padrão: 100 = R$ 1,00)
merchantNamestringNãoNome do beneficiário
# Enviar PIX por e-mail
curl -X POST https://use.sendzap.online/api/whatsapp/send-pix \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "pixKey": "pix@minhaloja.com",
    "amount": 5000,
    "merchantName": "Minha Loja"
  }'

# Enviar PIX por CPF (keyType auto-detectado)
curl -X POST https://use.sendzap.online/api/whatsapp/send-pix \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "pixKey": "12345678901",
    "amount": 15000
  }'
Resposta:
{
  "success": true,
  "message": "PIX enviado com sucesso",
  "messageId": "3EB0A7B4..."
}
POST /whatsapp/send-payment-order - Enviar pedido de pagamento com itens NOVO

Envia um pedido de pagamento completo com lista de produtos e métodos de pagamento (PIX, boleto, cartão).

ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão
phonestringSimNúmero com DDI+DDD
itemsarraySimLista de produtos (amount, name, quantity)
paymentSettingsarraySimMétodos de pagamento (PIX, boleto, cartão)
curl -X POST https://use.sendzap.online/api/whatsapp/send-payment-order \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "items": [
      {"amount": 2500, "name": "Produto X", "quantity": 2},
      {"amount": 1000, "name": "Frete", "quantity": 1}
    ],
    "paymentSettings": [
      {
        "type": "pix_static_code",
        "pix_static_code": {
          "key": "pix@loja.com",
          "key_type": "EMAIL",
          "merchant_name": "Minha Loja"
        }
      },
      {
        "type": "cards",
        "cards": {"enabled": false}
      }
    ]
  }'
Campos do item:
CampoDescrição
amountValor em centavos (2500 = R$ 25,00)
nameNome do produto
quantityQuantidade
retailer_idID do produto (opcional, gerado automaticamente)
Tipos de pagamento (paymentSettings):
TipoDescrição
pix_static_codePIX com chave estática (key, key_type: PHONE/EMAIL/CPF/CNPJ/EVP, merchant_name)
boletoBoleto bancário (digitable_line: linha digitável)
cardsCartão de crédito (enabled: true/false)
Resposta:
{
  "success": true,
  "message": "Pedido de pagamento enviado com sucesso",
  "messageId": "3EB0A7B4..."
}
POST /whatsapp/send-carousel - Enviar carrossel de cards NOVO

Envia um carrossel com múltiplos cards (imagens + botões) que o usuário pode deslizar horizontalmente.

ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão
phonestringSimNúmero com DDI+DDD
titlestringSimTítulo do carrossel
descriptionstringNãoDescrição abaixo do título
footerstringNãoRodapé
cardsarraySimLista de cards
Campos do card:
CampoObrigatórioDescrição
thumbnailUrlSimURL da imagem do card
textNãoTexto do card
buttonsNãoBotões do card (reply, url, call)
curl -X POST https://use.sendzap.online/api/whatsapp/send-carousel \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "phone": "5511999999999",
    "title": "Nossos Imóveis",
    "description": "Confira as melhores opções",
    "footer": "Imobiliária XYZ",
    "cards": [
      {
        "text": "Casa 3 quartos - R$ 450.000",
        "thumbnailUrl": "https://exemplo.com/casa1.jpg",
        "buttons": [
          {"type": "url", "displayText": "Ver Detalhes", "url": "https://exemplo.com/imovel/1"},
          {"type": "call", "displayText": "Ligar", "phoneNumber": "5511988887777"}
        ]
      },
      {
        "text": "Apartamento 2 quartos - R$ 320.000",
        "thumbnailUrl": "https://exemplo.com/apto1.jpg",
        "buttons": [
          {"type": "url", "displayText": "Ver Detalhes", "url": "https://exemplo.com/imovel/2"},
          {"type": "reply", "displayText": "Quero visitar", "id": "visit_2"}
        ]
      },
      {
        "thumbnailUrl": "https://exemplo.com/terreno1.jpg",
        "buttons": [
          {"type": "url", "displayText": "Ver no Mapa", "url": "https://exemplo.com/mapa/3"},
          {"type": "call", "displayText": "Falar com corretor", "phoneNumber": "5511977776666"},
          {"type": "reply", "displayText": "Mais Info", "id": "info_3"}
        ]
      }
    ]
  }'
Resposta:
{
  "success": true,
  "message": "Carousel enviado com sucesso",
  "messageId": "3EB0A7B4..."
}

POST /whatsapp/disconnect - Desconectar WhatsApp
ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
curl -X POST https://use.sendzap.online/api/whatsapp/disconnect \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "vendas"
  }'
Resposta:
{
  "success": true,
  "message": "Sessão desconectada"
}
GET /whatsapp/sessions - Listar todas as sessões
curl -X GET https://use.sendzap.online/api/whatsapp/sessions \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "sessions": [
    {"id": 1, "session_name": "default", "phone": "5511999999999", "status": "connected"},
    {"id": 2, "session_name": "vendas", "phone": "5511888888888", "status": "connected"},
    {"id": 3, "session_name": "suporte", "phone": null, "status": "disconnected"}
  ]
}
GET /whatsapp/messages - Histórico de mensagens
QueryDescrição
pagePágina (padrão: 1)
limitItens por página (padrão: 50)
statusFiltrar: sent, failed, pending
phoneFiltrar por número
curl -X GET "https://use.sendzap.online/api/whatsapp/messages?page=1&limit=20" \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "messages": [
    {"id": 1, "phone_to": "5511999999999", "message": "Olá!", "status": "sent"}
  ],
  "pagination": {"page": 1, "limit": 20, "total": 100, "totalPages": 5}
}
GET /whatsapp/stats - Estatísticas
curl -X GET https://use.sendzap.online/api/whatsapp/stats \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "stats": {
    "totalMessages": 1500,
    "sentMessages": 1450,
    "failedMessages": 50,
    "todayMessages": 75,
    "activeSessions": 2
  }
}

Carteira e Créditos
GET /user/wallet - Consultar saldo e informações da carteira IMPORTANTE

Retorna informações completas sobre créditos, custos, instâncias e assinatura do usuário.

curl -X GET https://use.sendzap.online/api/user/wallet \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "wallet": {
    "credits": 500,
    "costs": {
      "single": 1,
      "bulk": 1
    },
    "instances": {
      "total": 3,
      "connected": 2,
      "limit": 5,
      "free": 1
    },
    "subscription": {
      "active": true,
      "plan_name": "Plano Pro",
      "instances_added": 4,
      "monthly_cost": 50,
      "status": "active",
      "next_billing_date": "2024-02-15"
    },
    "recent_transactions": [
      {
        "id": 123,
        "amount": -50,
        "type": "debit",
        "description": "Disparo em massa \"Campanha\" - 50 mensagens enviadas",
        "created_at": "2024-01-15 10:30:00"
      },
      {
        "id": 122,
        "amount": 100,
        "type": "credit",
        "description": "Compra de créditos - Plano Básico",
        "created_at": "2024-01-14 09:00:00"
      }
    ]
  }
}
Campos importantes:
CampoDescrição
creditsSaldo atual de créditos disponíveis
costs.singleCusto por mensagem individual
costs.bulkCusto por mensagem em disparo em massa
instances.totalTotal de instâncias criadas
instances.connectedInstâncias atualmente conectadas
instances.limitLimite máximo de instâncias permitidas
subscriptionInformações da assinatura de instâncias (null se não houver)

Verificação de Números
POST /whatsapp/check-number - Verificar se um número tem WhatsApp
ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
phonestringSimNúmero no formato: código país + DDD + número (ex: 5511999999999)
curl -X POST https://use.sendzap.online/api/whatsapp/check-number \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "default",
    "phone": "5511999999999"
  }'
Resposta (número válido com foto):
{
  "success": true,
  "exists": true,
  "number": "5511999999999",
  "jid": "5511999999999@s.whatsapp.net",
  "isBusiness": false,
  "profilePicture": "https://pps.whatsapp.net/v/t61.24694-24/..."
}
Resposta (número válido sem foto de perfil):
{
  "success": true,
  "exists": true,
  "number": "5511999999999",
  "jid": "5511999999999@s.whatsapp.net",
  "isBusiness": false,
  "profilePicture": null
}
Resposta (número inválido):
{
  "success": true,
  "exists": false,
  "number": "5511999999999",
  "jid": null,
  "isBusiness": false,
  "profilePicture": null
}
POST /whatsapp/check-numbers - Verificar múltiplos números em massa (até 5.000)
ParâmetroTipoObrigatórioDescrição
sessionNamestringNãoNome da sessão (padrão: "default")
phonesarraySimArray de números. Máximo: 5.000 por requisição
curl -X POST https://use.sendzap.online/api/whatsapp/check-numbers \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "default",
    "phones": [
      "5511999999999",
      "5521988887777",
      "5531977776666"
    ]
  }'
Resposta:
{
  "success": true,
  "total": 3,
  "valid": 2,
  "invalid": 1,
  "numbers": [
    {
      "number": "5511999999999",
      "exists": true,
      "jid": "5511999999999@s.whatsapp.net",
      "isBusiness": false,
      "profilePicture": "https://pps.whatsapp.net/v/t61.24694-24/..."
    },
    {
      "number": "5521988887777",
      "exists": true,
      "jid": "5521988887777@s.whatsapp.net",
      "isBusiness": true,
      "profilePicture": null
    },
    {
      "number": "5531977776666",
      "exists": false,
      "jid": null,
      "isBusiness": false,
      "profilePicture": null
    }
  ]
}
Notas:
  • Números são verificados em lotes de 100 (delay de 500ms entre lotes)
  • Fotos de perfil são buscadas somente para números válidos, em lotes paralelos de 10
  • profilePicture retorna null se o número não tiver foto ou a privacidade do contato não permitir
  • Para grandes volumes (1.000+ números), o tempo de resposta é proporcional à quantidade de válidos

Gerenciamento de Conta
POST /user/regenerate-key - Gerar nova API Key
curl -X POST https://use.sendzap.online/api/user/regenerate-key \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY"
Resposta:
{
  "success": true,
  "message": "API Key regenerada com sucesso",
  "api_key": "wapi_nova_api_key_aqui"
}
Exemplo Completo: Múltiplas Sessões
# 1. Criar e conectar sessão de vendas
curl -X POST https://use.sendzap.online/api/whatsapp/connect \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{"sessionName": "vendas"}'

# 2. Criar e conectar sessão de suporte
curl -X POST https://use.sendzap.online/api/whatsapp/connect \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{"sessionName": "suporte"}'

# 3. Obter QR Code de cada sessão (escaneie com WhatsApp)
curl -X GET "https://use.sendzap.online/api/whatsapp/qrcode?sessionName=vendas" \
  -H "Authorization: Bearer SUA_API_KEY"

curl -X GET "https://use.sendzap.online/api/whatsapp/qrcode?sessionName=suporte" \
  -H "Authorization: Bearer SUA_API_KEY"

# 4. Listar todas as sessões
curl -X GET https://use.sendzap.online/api/whatsapp/sessions \
  -H "Authorization: Bearer SUA_API_KEY"

# 5. Enviar mensagem pela sessão de vendas
curl -X POST https://use.sendzap.online/api/whatsapp/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "vendas",
    "phone": "5511999999999",
    "message": "Olá! Aqui é a equipe de vendas."
  }'

# 6. Enviar mensagem pela sessão de suporte
curl -X POST https://use.sendzap.online/api/whatsapp/send \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -d '{
    "sessionName": "suporte",
    "phone": "5511999999999",
    "message": "Olá! Aqui é o suporte técnico."
  }'
Formato do Número

Sempre use: código do país + DDD + número

CorretoErrado
551199999999911999999999
5521988887777(21) 98888-7777
5531977776666+55 31 97777-6666
Códigos de Erro
CódigoDescrição
200Sucesso
400Parâmetros inválidos
401API Key inválida ou não fornecida
404Sessão não encontrada
500Erro interno do servidor