API completa para gerenciar múltiplas sessões do WhatsApp simultaneamente. Permite envio e recebimento de mensagens, gerenciamento de sessões e muito mais.
🌐 URL Base da API:
https://app.autowhats.com.br/api
Todas as requisições à API requerem autenticação através do header X-API-Key.
Você pode usar a API key master fornecida pelo administrador ou criar suas próprias API keys através do sistema de gerenciamento.
Lista todas as API keys cadastradas (requer API key master).
{
"total": 2,
"keys": [
{
"id": "abc123...",
"name": "Minha API Key",
"active": true,
"createdAt": "2024-11-27T19:00:00.000Z",
"lastUsed": null,
"key": "aw_1234567..."
}
]
}
Cria uma nova API key (requer API key master).
{
"name": "Nome da API Key"
}
{
"success": true,
"id": "abc123...",
"name": "Nome da API Key",
"key": "aw_abcdef1234567890...",
"message": "API key criada com sucesso"
}
Atualiza uma API key (ativar/desativar ou renomear).
{
"active": false,
"name": "Novo Nome"
}
Deleta uma API key permanentemente.
🔄 Reutilização Inteligente de Sessões:
A API garante que sempre a mesma sessão seja mantida para cada sessionId. Isso significa:
sessionId: "minha-sessao", ela será criadasessionId, a API reutiliza a sessão existente
💡 Dica: Use sempre o mesmo sessionId para manter a mesma sessão. A API gerencia automaticamente a persistência e restauração.
✨ Novidades: A API agora possui validações robustas, exclusão automática de contas excluídas, limpeza automática de sessões antigas e reutilização inteligente de sessões.
Cria uma nova sessão do WhatsApp ou reutiliza uma sessão existente.
{
"sessionId": "minha-sessao-001",
"webhookUrl": "https://meusite.com/webhook" // opcional
}
{
"success": true,
"sessionId": "minha-sessao-001",
"status": "pending",
"message": "Sessão criada com sucesso. Busque o QR Code em GET /api/sessions/:id/qr"
}
{
"success": true,
"sessionId": "minha-sessao-001",
"status": "connected",
"message": "Sessão já existe e foi reutilizada. Busque o QR Code em GET /api/sessions/:id/qr",
"existing": true
}
✅ Reutilização Inteligente:
sessionId📝 Exemplo Prático:
// 1. Criar sessão pela primeira vez
POST /api/sessions
{ "sessionId": "cliente-001" }
// Resposta: "Sessão criada com sucesso"
// 2. Criar novamente com o mesmo sessionId
POST /api/sessions
{ "sessionId": "cliente-001" }
// Resposta: "Sessão já existe e foi reutilizada" + "existing": true
// 3. Buscar QR code (usa a mesma sessão)
GET /api/sessions/cliente-001/qr
// Retorna QR da mesma sessão criada anteriormente
// ✅ Resultado: Sempre a mesma sessão, sem duplicações!
⚠️ Importante: O sessionId deve ser único e não pode conter caracteres especiais. Use apenas letras, números, hífens e underscores.
Lista todas as sessões cadastradas.
{
"total": 3,
"sessions": [
{
"sessionId": "minha-sessao-001",
"status": "connected",
"hasWebhook": true,
"lastUpdate": "2024-11-28T10:30:00.000Z"
}
]
}
Verifica o status detalhado de uma sessão.
{
"sessionId": "minha-sessao-001",
"status": "connected", // "pending", "connected", "disconnected", "not_found"
"lastUpdate": "2024-11-28T10:30:00.000Z",
"hasWebhook": true
}
📊 Status Possíveis:
pending: Aguardando conexão (QR Code gerado)connected: Conectada e pronta para usodisconnected: Desconectada (será removida automaticamente após 30 dias)not_found: Sessão não encontradaObtém o QR Code para conectar o WhatsApp. Restaura automaticamente sessões do banco de dados se necessário.
{
"sessionId": "minha-sessao-001",
"qr": "data:image/png;base64,iVBORw0KGgoAAAANS...",
"status": "pending",
"hasQr": true
}
💡 Use o campo qr (data URL) diretamente em uma tag <img> para exibir o QR Code.
🔄 Restauração Automática:
⚠️ Nota: O QR Code expira após alguns minutos. Faça polling neste endpoint até que status seja connected.
Resolve um LID (Linked ID) para número de telefone real.
{
"success": true,
"lid": "260614521942021@lid",
"number": "5531991441439@c.us",
"resolved": true
}
{
"success": false,
"lid": "260614521942021@lid",
"number": null,
"resolved": false,
"message": "Não foi possível resolver o LID para um número de telefone."
}
Desconecta uma sessão do WhatsApp (mantém dados no servidor).
{
"success": true,
"sessionId": "minha-sessao-001",
"message": "Sessão desconectada com sucesso"
}
💡 Dica: Use DELETE /api/sessions/:id se quiser remover completamente a sessão (incluindo arquivos e banco de dados).
Exclui completamente uma sessão (remove da memória, disco e banco de dados).
{
"success": true,
"sessionId": "minha-sessao-001",
"message": "Sessão excluída com sucesso (incluindo arquivos do servidor)"
}
✅ O que é removido:
🔄 Exclusão Automática: Se uma conta do WhatsApp for excluída pelo usuário, a sessão será removida automaticamente após 3-5 segundos, sem necessidade de chamar este endpoint.
✅ Formato Correto: A API aceita números em formato internacional sem espaços, parênteses ou hífens.
Para números brasileiros, use o formato: 55 + DDD + Número (sem o 0 inicial do DDD).
| Formato Original | Formato Correto | Exemplo |
|---|---|---|
| (71) 99146-0801 | 5571991460801 |
✅ Correto |
| 071 99146-0801 | 5571991460801 |
✅ Correto (0 removido automaticamente) |
| +55 71 99146-0801 | 5571991460801 |
✅ Correto (+ removido automaticamente) |
| 71991460801 | 5571991460801 |
✅ Correto (55 adicionado automaticamente) |
Para números de outros países, use o formato: Código do País + Número (sem espaços ou caracteres especiais).
| País | Código | Exemplo |
|---|---|---|
| Estados Unidos | 1 |
15551234567 |
| Portugal | 351 |
351912345678 |
| Argentina | 54 |
5491123456789 |
| México | 52 |
5215512345678 |
⚠️ Regras Importantes:
@g.us no final (ex: 120363123456789012@g.us)// ✅ Correto - Número brasileiro
{
"sessionId": "minha-sessao-001",
"to": "5571991460801",
"message": "Olá!"
}
// ✅ Correto - Número com @c.us (também aceito)
{
"sessionId": "minha-sessao-001",
"to": "5571991460801@c.us",
"message": "Olá!"
}
// ❌ Incorreto - Com caracteres especiais
{
"to": "(71) 99146-0801" // ERRO: não aceita parênteses e hífens
}
// ❌ Incorreto - Sem código do país
{
"to": "71991460801" // ERRO: falta o código 55
}
// ✅ Correto - A API normaliza automaticamente
{
"to": "071991460801" // ✅ Será normalizado para 5571991460801
}
Envia uma mensagem de texto.
{
"sessionId": "minha-sessao-001",
"to": "5571991460801", // Número com DDD e código do país (55 para Brasil)
"message": "Olá! Esta é uma mensagem de teste."
}
{
"success": true,
"messageId": "true_5571991460801@c.us_3EB0...",
"to": "5571991460801@c.us",
"timestamp": "2024-11-27T19:00:00.000Z"
}
💡 Formato do número: Veja a seção Formatos de Números de Telefone para informações detalhadas sobre formatação correta.
Abre/prepara um chat com um número (opcional, mas recomendado antes de enviar mensagens).
{
"to": "5571991460801"
}
Obtém mensagens recebidas para uma sessão.
limit: Número máximo de mensagens (padrão: 50)since: Timestamp para buscar apenas mensagens após essa data{
"success": true,
"sessionId": "minha-sessao-001",
"total": 10,
"count": 2,
"messages": [
{
"id": "true_5571991460801@c.us_3EB0...",
"from": "5531991441439@c.us",
"fromOriginal": "260614521942021@lid",
"to": "5531991441439@c.us",
"body": "Olá! Esta é uma mensagem recebida",
"type": "chat",
"timestamp": 1701123456789,
"isGroup": false,
🔄 Normalização Automática de LIDs:
O sistema normaliza automaticamente LIDs (Linked IDs) para números reais.
Quando você recebe uma mensagem de um LID (ex: 260614521942021@lid),
o campo from será automaticamente convertido para o número real
(ex: 5531991441439@c.us), mantendo as conversas unificadas.
from: Número normalizado (use este para manter conversas unificadas)
fromOriginal: ID original do WhatsApp (LID ou número) - mantido para referência
- O mapeamento é feito automaticamente usando histórico de envios e API do WhatsApp
"mediaUrl": null,
"mediaMimetype": null,
"mediaFilename": null
}
]
}
Campos:
• from: Número normalizado (ex: 5531991441439@c.us) - use este para manter conversas unificadas
• fromOriginal: ID original do WhatsApp (pode ser LID como 260614521942021@lid) - mantido para referência
• total: Total de mensagens armazenadas para esta sessão
• count: Quantidade de mensagens retornadas nesta requisição
• timestamp: Timestamp em milissegundos (use para o parâmetro since)
• mediaUrl: Base64 da mídia (se houver)
💡 Dica: Use o parâmetro since para fazer polling e buscar apenas mensagens novas.
Armazene o timestamp da última mensagem e use-o na próxima requisição.
Envia mídia (imagens, vídeos, áudios ou documentos). Suporta envio via URL ou Base64.
{
"sessionId": "minha-sessao-001",
"to": "5571991460801",
"mediaUrl": "https://exemplo.com/imagem.jpg",
"caption": "Legenda opcional",
"mimetype": "image/jpeg", // opcional
"filename": "imagem.jpg" // opcional
}
{
"sessionId": "minha-sessao-001",
"to": "5571991460801",
"mediaBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
"caption": "Legenda opcional",
"mimetype": "image/jpeg",
"filename": "imagem.jpg"
}
{
"success": true,
"messageId": "true_5571991460801@c.us_ABC123",
"to": "5571991460801@c.us",
"type": "media",
"timestamp": "2024-11-27T19:00:00.000Z"
}
📋 Tipos de Mídia Suportados:
image/jpeg, image/png, image/gif, image/webpvideo/mp4, video/avi, video/quicktimeaudio/mpeg (MP3), audio/ogg, audio/mp4 (M4A), audio/wavapplication/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document (DOCX), etc.⚠️ Limitações do WhatsApp:
Enviar Imagem (JavaScript):
const response = await fetch('https://app.autowhats.com.br/api/messages/media', {
method: 'POST',
headers: {
'X-API-Key': 'sua_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
sessionId: 'minha-sessao-001',
to: '5571991460801',
mediaUrl: 'https://exemplo.com/foto.jpg',
caption: 'Olha essa foto!',
mimetype: 'image/jpeg'
})
});
const data = await response.json();
Enviar Vídeo (cURL):
curl -X POST https://app.autowhats.com.br/api/messages/media \
-H "X-API-Key: sua_api_key" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "minha-sessao-001",
"to": "5571991460801",
"mediaUrl": "https://exemplo.com/video.mp4",
"caption": "Assista este vídeo!",
"mimetype": "video/mp4"
}'
Enviar Áudio via Base64 (Python):
import requests
import base64
# Ler arquivo e converter para base64
with open('audio.mp3', 'rb') as f:
audio_base64 = base64.b64encode(f.read()).decode('utf-8')
data_uri = f"data:audio/mpeg;base64,{audio_base64}"
response = requests.post(
'https://app.autowhats.com.br/api/messages/media',
headers={'X-API-Key': 'sua_api_key'},
json={
'sessionId': 'minha-sessao-001',
'to': '5571991460801',
'mediaBase64': data_uri,
'caption': 'Escute isso!',
'mimetype': 'audio/mpeg',
'filename': 'audio.mp3'
}
)
print(response.json())
Enviar Documento (PHP):
'minha-sessao-001',
'to' => '5571991460801',
'mediaUrl' => 'https://exemplo.com/documento.pdf',
'caption' => 'Veja este documento',
'mimetype' => 'application/pdf',
'filename' => 'documento.pdf'
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
A API suporta completamente o envio e recebimento de imagens, vídeos, áudios e documentos.
📚 Documentação Completa: Para um guia detalhado com exemplos completos, acesse a documentação completa de mídias.
✅ Tipos de Mídia Suportados:
Use o endpoint POST /api/messages/media para enviar mídia.
Você pode enviar via URL (recomendado) ou Base64.
{
"sessionId": "minha-sessao-001",
"to": "5571991460801",
"mediaUrl": "https://exemplo.com/imagem.jpg",
"caption": "Legenda opcional",
"mimetype": "image/jpeg", // opcional, será detectado automaticamente
"filename": "imagem.jpg" // opcional
}
{
"sessionId": "minha-sessao-001",
"to": "5571991460801",
"mediaBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
"caption": "Legenda opcional",
"mimetype": "image/jpeg",
"filename": "imagem.jpg"
}
{
"success": true,
"messageId": "true_5571991460801@c.us_ABC123",
"to": "5571991460801@c.us",
"type": "media",
"timestamp": "2024-11-27T19:00:00.000Z"
}
⚠️ Limitações do WhatsApp:
Mídias recebidas são enviadas automaticamente via webhook (se configurado)
ou podem ser consultadas via GET /api/sessions/:id/messages.
📋 Campos de Mídia no Webhook/Mensagens:
mediaUrl: URL do arquivo de mídia (ex: /api/media/session-001_ABC123.jpg) - NOVO: Mídias são armazenadas em disco, não mais em Base64mediaMimetype: Tipo MIME (ex: image/jpeg, video/mp4)mediaFilename: Nome do arquivo original (se disponível)type: Tipo da mensagem (image, video, audio, document){
"sessionId": "minha-sessao-001",
"from": "5571991460801@c.us",
"to": "5571991460801@c.us",
"body": "Legenda da imagem (se houver)",
"type": "image",
"timestamp": 1234567890,
"mediaUrl": "/api/media/session-001_ABC123.jpg",
"mediaMimetype": "image/jpeg",
"mediaFilename": "foto.jpg",
"isGroup": false
}
📥 Como Acessar a Mídia:
O campo mediaUrl agora contém uma URL relativa. Para baixar a mídia, faça uma requisição GET:
GET https://app.autowhats.com.br/api/media/session-001_ABC123.jpg
✅ Vantagens: Mídias são armazenadas em disco, reduzindo uso de memória em 99% e melhorando performance.
Mídias recebidas são armazenadas em disco e podem ser acessadas através deste endpoint público.
Serve mídias armazenadas em disco. Este endpoint é público (não requer API Key).
:filename - Nome do arquivo de mídia (ex: session-001_ABC123.jpg)Retorna o arquivo binário com os headers apropriados:
Content-Type: Tipo MIME detectado automaticamenteContent-Length: Tamanho do arquivoCache-Control: Cache por 1 anoContent-Disposition: inline (exibe no navegador)// JavaScript
const mediaUrl = '/api/media/session-001_ABC123.jpg';
const fullUrl = `https://app.autowhats.com.br${mediaUrl}`;
const response = await fetch(fullUrl);
const blob = await response.blob();
const imageUrl = URL.createObjectURL(blob);
document.getElementById('image').src = imageUrl;
// cURL
curl https://app.autowhats.com.br/api/media/session-001_ABC123.jpg -o imagem.jpg
// HTML
<img src="https://app.autowhats.com.br/api/media/session-001_ABC123.jpg" alt="Mídia">
✅ Vantagens do Novo Sistema:
⚠️ Nota: Este endpoint é público. Nomes de arquivo são validados para prevenir path traversal.
Existem duas formas de receber mensagens:
Configure um webhook ao criar a sessão. Quando uma mensagem chegar, a API enviará automaticamente um POST para sua URL. Ideal para receber mensagens em tempo real.
✅ Vantagens: Tempo real, não precisa fazer requisições constantes, mais eficiente
Use GET /api/sessions/:id/messages para buscar mensagens manualmente.
Faça requisições periódicas (ex: a cada 5-10 segundos) para verificar novas mensagens.
⚠️ Limitações: Requer requisições constantes, pode ter delay, menos eficiente
Exemplo de Polling:
// Fazer polling a cada 5 segundos
setInterval(async () => {
const response = await fetch(
`https://app.autowhats.com.br/api/sessions/minha-sessao/messages?since=${lastTimestamp}`,
{ headers: { 'X-API-Key': 'sua_api_key' } }
);
const data = await response.json();
if (data.messages && data.messages.length > 0) {
data.messages.forEach(msg => {
console.log('Nova mensagem:', msg.body);
lastTimestamp = msg.timestamp; // Atualizar timestamp
});
}
}, 5000);
Você pode configurar um webhook ao criar uma sessão. Quando uma mensagem for recebida, a API enviará automaticamente um POST para a URL configurada.
{
"sessionId": "minha-sessao-001",
"from": "5571991460801@c.us",
"to": "5571991460801@c.us",
"body": "Mensagem recebida",
"type": "chat",
"timestamp": 1234567890,
"mediaUrl": null,
"mediaMimetype": null,
"mediaFilename": null,
"isGroup": false
}
{
"sessionId": "minha-sessao-001",
"from": "5571991460801@c.us",
"to": "5571991460801@c.us",
"body": "Legenda da imagem (se houver)",
"type": "image", // ou "video", "audio", "document"
"timestamp": 1234567890,
"mediaUrl": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
"mediaMimetype": "image/jpeg",
"mediaFilename": "foto.jpg",
"isGroup": false
}
📥 Como Processar Mídia Recebida:
Quando uma mídia é recebida, o campo mediaUrl contém uma URL relativa (ex: /api/media/session-001_ABC123.jpg).
Faça uma requisição GET para https://app.autowhats.com.br{mediaUrl} para baixar o arquivo.
true]);
?>
const express = require('express');
const fs = require('fs');
const fetch = require('node-fetch');
const app = express();
app.use(express.json({ limit: '50mb' }));
app.post('/webhook', async (req, res) => {
const { mediaUrl, mediaMimetype, mediaFilename, from, body } = req.body;
if (mediaUrl) {
// NOVO: mediaUrl agora é uma URL, não Base64
// Baixar arquivo da API
const fullUrl = 'https://app.autowhats.com.br' + mediaUrl;
const response = await fetch(fullUrl);
const buffer = await response.buffer();
// Determinar extensão
const ext = mediaMimetype.split('/')[1];
const filename = mediaFilename || `midia_${Date.now()}.${ext}`;
// Salvar arquivo
fs.writeFileSync(`uploads/${filename}`, buffer);
console.log(`Mídia recebida de ${from}: ${filename}`);
}
res.status(200).send('OK');
});
app.listen(3001);
from flask import Flask, request, jsonify
import requests
import os
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def webhook():
data = request.json
if data.get('mediaUrl'):
# NOVO: mediaUrl agora é uma URL, não Base64
# Baixar arquivo da API
media_url = data['mediaUrl'] # Ex: /api/media/session-001_ABC123.jpg
full_url = f'https://app.autowhats.com.br{media_url}'
response = requests.get(full_url)
binary_data = response.content
# Determinar extensão
mimetype = data.get('mediaMimetype', '')
ext = mimetype.split('/')[1] if '/' in mimetype else 'bin'
filename = data.get('mediaFilename') or f"midia_{int(time.time())}.{ext}"
# Salvar arquivo
with open(f"uploads/{filename}", 'wb') as f:
f.write(binary_data)
print(f"Mídia recebida: {filename}")
return jsonify({'success': True}), 200
if __name__ == '__main__':
os.makedirs('uploads', exist_ok=True)
app.run(port=3001)
📋 Informações importantes:
timestamp: Timestamp em segundos (não milissegundos)mediaUrl: URL do arquivo de mídia (ex: /api/media/session-001_ABC123.jpg) - acesse via GET https://app.autowhats.com.br{mediaUrl}mediaMimetype: Tipo MIME da mídia (ex: "image/jpeg", "video/mp4")isGroup: true se a mensagem veio de um grupo true]);
} else {
http_response_code(400);
echo json_encode(['error' => 'Invalid payload']);
}
?>
Endpoints administrativos para gerenciar e manter a API. Requerem API key master.
⚠️ Atenção: Estes endpoints requerem a API key master. Use com cuidado, pois podem afetar todas as sessões.
Executa limpeza manual de sessões desconectadas há mais de X dias. Remove completamente sessões antigas (memória, disco, banco de dados).
{
"daysOld": 30 // Padrão: 30 dias
}
{
"success": true,
"message": "Limpeza concluída",
"cleaned": 5, // Número de sessões removidas
"errors": 0, // Número de erros
"total": 5 // Total de sessões encontradas
}
ℹ️ Limpeza Automática: A API executa limpeza automática diariamente às 3h da manhã, removendo sessões desconectadas há mais de 30 dias. Este endpoint permite executar limpeza manual quando necessário.
Retorna status detalhado de todas as sessões cadastradas, incluindo informações sobre memória, arquivos e mensagens.
{
"success": true,
"total": 3,
"sessions": [
{
"sessionId": "minha-sessao-001",
"status": "connected",
"inMemory": true,
"hasFiles": true,
"hasData": true,
"messageCount": 150,
"created_at": "2024-11-27T10:00:00.000Z",
"last_activity": "2024-11-28T10:30:00.000Z",
"disconnected_at": null,
"webhook_url": "https://meusite.com/webhook"
}
]
}
📊 Campos Retornados:
inMemory: Se a sessão está ativa na memóriahasFiles: Se existem arquivos de sessão no discohasData: Se existem dados da sessãomessageCount: Total de mensagens armazenadas para esta sessãolast_activity: Última atividade registradadisconnected_at: Data de desconexão (se desconectada)Sincroniza sessões órfãs (que existem no disco mas não no banco de dados) com o banco de dados.
{
"success": true,
"message": "Sincronização concluída",
"synced": 2 // Número de sessões sincronizadas
}
ℹ️ Comportamento:
POST /api/maintenance/clean-orphan-sessions para remover sessões órfãs inválidasRemove sessões órfãs inválidas do disco (que não estão na memória nem no banco de dados). Útil para limpar sessões criadas incorretamente.
{
"success": true,
"message": "Limpeza concluída",
"cleaned": 1 // Número de sessões removidas
}
⚠️ Atenção:
✅ Funcionalidades Automáticas da API:
// Criar uma sessão (ou reutilizar se já existir)
const response = await fetch('https://app.autowhats.com.br/api/sessions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'sua_api_key_aqui'
},
body: JSON.stringify({
sessionId: 'minha-sessao-001',
webhookUrl: 'https://meusite.com/webhook'
})
});
const data = await response.json();
console.log(data);
// Se data.existing === true, a sessão foi reutilizada
// Se não, uma nova sessão foi criada
// Obter QR Code
const qrResponse = await fetch('https://app.autowhats.com.br/api/sessions/minha-sessao-001/qr', {
headers: {
'X-API-Key': 'sua_api_key_aqui'
}
});
const qrData = await qrResponse.json();
// Use qrData.qr em uma tag <img>
document.getElementById('qrcode').src = qrData.qr;
// Enviar mensagem
const messageResponse = await fetch('https://app.autowhats.com.br/api/messages/text', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'sua_api_key_aqui'
},
body: JSON.stringify({
sessionId: 'minha-sessao-001',
to: '5571991460801',
message: 'Olá! Esta é uma mensagem de teste.'
})
});
const messageData = await messageResponse.json();
console.log('Mensagem enviada:', messageData);
# Criar sessão
curl -X POST https://app.autowhats.com.br/api/sessions \
-H "X-API-Key: sua_api_key_aqui" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "minha-sessao-001",
"webhookUrl": "https://meusite.com/webhook"
}'
# Obter QR Code
curl -X GET https://app.autowhats.com.br/api/sessions/minha-sessao-001/qr \
-H "X-API-Key: sua_api_key_aqui"
# Enviar mensagem
curl -X POST https://app.autowhats.com.br/api/messages/text \
-H "X-API-Key: sua_api_key_aqui" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "minha-sessao-001",
"to": "5571991460801",
"message": "Olá! Esta é uma mensagem de teste."
}'
import requests
API_BASE = "https://app.autowhats.com.br/api"
API_KEY = "sua_api_key_aqui"
headers = {"X-API-Key": API_KEY}
# Criar sessão
response = requests.post(
f"{API_BASE}/sessions",
headers=headers,
json={
"sessionId": "minha-sessao-001",
"webhookUrl": "https://meusite.com/webhook"
}
)
print(response.json())
# Obter QR Code
qr_response = requests.get(
f"{API_BASE}/sessions/minha-sessao-001/qr",
headers=headers
)
qr_data = qr_response.json()
print("QR Code:", qr_data["qr"])
# Enviar mensagem
message_response = requests.post(
f"{API_BASE}/messages/text",
headers=headers,
json={
"sessionId": "minha-sessao-001",
"to": "5571991460801",
"message": "Olá! Esta é uma mensagem de teste."
}
)
print(message_response.json())
$apiBase = "https://app.autowhats.com.br/api";
$apiKey = "sua_api_key_aqui";
$headers = [
"X-API-Key: " . $apiKey,
"Content-Type: application/json"
];
// Criar sessão
$ch = curl_init($apiBase . "/sessions");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"sessionId" => "minha-sessao-001",
"webhookUrl" => "https://meusite.com/webhook"
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
// Enviar mensagem
$ch = curl_init($apiBase . "/messages/text");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"sessionId" => "minha-sessao-001",
"to" => "5571991460801",
"message" => "Olá! Esta é uma mensagem de teste."
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
| Código | Descrição |
|---|---|
| 200 | Sucesso |
| 400 | Requisição inválida |
| 401 | Não autenticado (API key inválida) |
| 403 | Acesso negado |
| 404 | Recurso não encontrado |
| 500 | Erro interno do servidor |
POST /api/messages/media com mediaUrl ou mediaBase64mediaUrl do webhookmediaUrl para arquivos grandes e mediaBase64 para arquivos pequenos/api/media/filename). Acesse via GET https://app.autowhats.com.br{mediaUrl} para baixar o arquivosessionId para manter a mesma sessão - a API reutiliza automaticamente sessões existentes