WhatsApp API — Referencia dos Endpoints
Documentacao completa de todos os endpoints REST e eventos Socket.io para integracao com o WhatsApp via Baileys.
Retorna o estado atual da conexao WhatsApp, numero e nome do usuario conectado.
curl -X GET https://seu-dominio.com/api/status
{ "success": true, "status": "connected", "phone": "5511999999999@s.whatsapp.net", "name": "Joao" }{ "success": true, "status": "disconnected", "phone": null, "name": null }Inicia ou reinicia a conexao. Se existir sessao salva, conecta automaticamente. Caso contrario, gera QR Code via Socket.io.
curl -X POST https://seu-dominio.com/api/connect
{ "success": true, "message": "Conectando..." }Fecha o socket sem apagar os arquivos de sessao. Na proxima conexao, nao sera necessario escanear o QR novamente.
curl -X POST https://seu-dominio.com/api/disconnect
{ "success": true, "message": "Desconectado com sucesso." }Apaga todos os arquivos de sessao e reinicia a autenticacao. Alias: /api/logout.
curl -X POST https://seu-dominio.com/api/reset
{ "success": true, "message": "Sessao resetada - novo QR Code sera gerado." }Envia texto. Exibe digitando... automaticamente antes de enviar. Alias: /api/send/text.
| Campo | Tipo | Obrig. | Descricao |
|---|---|---|---|
| phone | string | Sim | Numero DDI+DDD+numero. Ex: 5511999999999. Aceita to. |
| message | string | Sim | Texto da mensagem. Aceita text. |
| senderName | string | Nao | Prefixa com [Nome]. Ex: "Suporte" vira "[Suporte] Ola!". Aceita sender_name. |
curl -X POST https://seu-dominio.com/api/send-message -H "Content-Type: application/json" -d '{"phone":"5511999999999","message":"Ola!","senderName":"Suporte"}'
r = requests.post("https://seu-dominio.com/api/send-message",
json={"phone": "5511999999999", "message": "Ola!", "senderName": "Suporte"})
{ "success": true, "message": "Mensagem enviada com sucesso." }{ "success": false, "message": "Os campos phone e message sao obrigatorios." }{ "success": false, "message": "WhatsApp nao esta conectado" }Envia imagem a partir de URL publica. Para upload de arquivo use /api/send/image.
| Campo | Tipo | Obrig. | Descricao |
|---|---|---|---|
| phone | string | Sim | Numero do destinatario. Aceita to. |
| imageUrl | string | Sim | URL publica da imagem (jpg, png, gif, webp). Aceita image_url. |
| caption | string | Nao | Legenda da imagem. |
| senderName | string | Nao | Prefixo [Nome] na legenda. |
curl -X POST https://seu-dominio.com/api/send-image -H "Content-Type: application/json" -d '{"phone":"5511999999999","imageUrl":"https://exemplo.com/foto.jpg","caption":"Promocao!"}'
{ "success": true, "message": "Imagem enviada com sucesso." }{ "success": false, "message": "Os campos phone e imageUrl sao obrigatorios." }{ "success": false, "message": "WhatsApp nao esta conectado" }Envia imagem como upload multipart/form-data. Limite: 10 MB.
| Campo | Tipo | Obrig. | Descricao |
|---|---|---|---|
| phone | string | Sim | Numero do destinatario. |
| image | file | Sim* | Arquivo de imagem. *Obrigatorio se imageUrl nao for fornecido. |
| imageUrl | string | Nao | Alternativa ao arquivo. |
| caption | string | Nao | Legenda da imagem. |
| senderName | string | Nao | Prefixo [Nome] na legenda. |
curl -X POST https://seu-dominio.com/api/send/image -F "phone=5511999999999" -F "caption=Foto!" -F "image=@/caminho/foto.jpg"
{ "success": true, "message": "Imagem enviada com sucesso." }{ "success": false, "message": "Envie um arquivo via multipart ou forneca imageUrl." }Envia um contato no formato vCard. O destinatario podera salvar diretamente pelo WhatsApp.
| Campo | Tipo | Obrig. | Descricao |
|---|---|---|---|
| phone | string | Sim | Numero do destinatario. |
| contactName | string | Sim | Nome de exibicao do contato a ser enviado. |
| contactPhone | string | Sim | Numero do contato a ser enviado (com DDI). |
curl -X POST https://seu-dominio.com/api/send-contact -H "Content-Type: application/json" -d '{"phone":"5511999999999","contactName":"Maria","contactPhone":"5511888888888"}'
{ "success": true, "message": "Contato enviado com sucesso." }{ "success": false, "message": "Os campos phone, contactName e contactPhone sao obrigatorios." }Exibe o indicador de digitacao pelo tempo especificado. Nos endpoints de envio, a digitacao ja e automatica.
| Campo | Tipo | Obrig. | Descricao |
|---|---|---|---|
| phone | string | Sim | Numero do destinatario. Aceita to. |
| duration | number | Nao | Duracao em ms. Min: 500 / Max: 15000 / Padrao: 3000. |
curl -X POST https://seu-dominio.com/api/typing -H "Content-Type: application/json" -d '{"phone":"5511999999999","duration":4000}'
{ "success": true, "message": "Indicador digitando... enviado." }{ "success": false, "message": "duration deve ser numero positivo em milissegundos." }Retorna o buffer circular das ultimas mensagens recebidas (max. 50), mantidas em memoria.
| Parametro | Tipo | Obrig. | Descricao |
|---|---|---|---|
| limit | number | Nao | Quantidade de mensagens. Padrao: 50. Maximo: 50. |
curl "https://seu-dominio.com/api/messages/recent?limit=10"
r = requests.get("https://seu-dominio.com/api/messages/recent", params={"limit": 10})
{ "success": true, "count": 1, "messages": [{ "messageId": "3EB0...", "from": "5511999999999", "name": "Joao", "message": "Ola", "type": "text", "timestamp": 1742000000, "isGroup": false }] }
Conecte via Socket.io para receber atualizacoes em tempo real sem polling.
import socketio, requests
sio = socketio.Client()
sio.connect("https://seu-dominio.com", transports=["websocket"])
sio.wait()
Emitido a cada mudanca de estado do WhatsApp e ao conectar (snapshot atual).
{ "state": "connected", "phone": "5511999999999@s.whatsapp.net", "name": "Joao", "qr": "data:image/png;base64,..." }
Emitido a cada novo QR Code gerado (~60s de validade).
{ "qr": "data:image/png;base64,iVBORw0KGgo..." }
Emitido para cada mensagem recebida (exceto broadcasts e mensagens proprias).
{ "messageId": "3EB0...", "from": "5511999999999", "name": "Joao", "message": "Ola!", "type": "text", "timestamp": 1742000000, "isGroup": false }
Buffer das ultimas 50 mensagens, enviado ao conectar e em resposta ao evento get_recent_messages.
[{ "messageId": "...", "from": "551199...", "message": "...", "type": "text", "timestamp": 1742000000, "isGroup": false }]
Emita este evento para solicitar o buffer. O servidor responde com recent_messages.
sio.emit("get_recent_messages")