API v1 · Evolution 2.3.7
Integração por API
Conecte CRM, ERP, automações ou qualquer backend ao EnvioZap e dispare mensagens WhatsApp via HTTP.
| Base URL | https://evolution.31-97-244-109.sslip.io |
|---|---|
| Auth | Header apikey |
| Formato | JSON · UTF-8 |
| Teste visual | test.31-97-244-109.sslip.io |
Guarde a API Key apenas no backend do seu sistema. Não use no frontend público.
A chave está em
/opt/enviozap/.secrets (EVOLUTION_API_KEY) no servidor.
Autenticação
Inclua a chave em todas as requisições:
apikey: YOUR_API_KEY
Alternativa aceita:
Authorization: Bearer YOUR_API_KEY
Listar instâncias
GET /instance/fetchInstances
curl -X GET "https://evolution.31-97-244-109.sslip.io/instance/fetchInstances" \
-H "apikey: YOUR_API_KEY"
Use o campo name da instância nos endpoints de envio. Só dispare quando connectionStatus for open.
[
{
"name": "GetPasq",
"connectionStatus": "open",
"ownerJid": "551131096842@s.whatsapp.net",
"profileName": "Murilo Suporte",
"token": "INSTANCE_TOKEN"
}
]
Status de conexão
GET /instance/connectionState/{instanceName}
curl -X GET "https://evolution.31-97-244-109.sslip.io/instance/connectionState/GetPasq" \
-H "apikey: YOUR_API_KEY"
{
"instance": {
"instanceName": "GetPasq",
"state": "open"
}
}
Enviar mensagem de texto
POST /message/sendText/{instanceName}
Body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
number | string | sim | Telefone só dígitos, com DDI+DDD. Ex: 5511999999999 |
text | string | sim | Conteúdo da mensagem |
curl -X POST "https://evolution.31-97-244-109.sslip.io/message/sendText/GetPasq" \
-H "Content-Type: application/json" \
-H "apikey: YOUR_API_KEY" \
-d '{
"number": "5511999999999",
"text": "Olá! Mensagem enviada via EnvioZap."
}'
Formato do número
| Correto | Incorreto |
|---|---|
5511999999999 | +55 11 99999-9999 |
5511987654321 | (11) 98765-4321 |
Enviar imagem / mídia
POST /message/sendMedia/{instanceName}
{
"number": "5511999999999",
"mediatype": "image",
"mimetype": "image/png",
"caption": "Legenda opcional",
"media": "https://exemplo.com/imagem.png",
"fileName": "imagem.png"
}
media aceita URL pública ou base64.
Exemplos por linguagem
const EVOLUTION_URL = 'https://evolution.31-97-244-109.sslip.io';
const API_KEY = process.env.ENVIOZAP_API_KEY;
const INSTANCE = 'GetPasq';
async function sendWhatsApp(number, text) {
const res = await fetch(`${EVOLUTION_URL}/message/sendText/${INSTANCE}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
apikey: API_KEY,
},
body: JSON.stringify({ number, text }),
});
if (!res.ok) throw new Error(await res.text());
return res.json();
}
await sendWhatsApp('5511999999999', 'Pedido #1234 confirmado!');
<?php
function enviozap_send_text(string $number, string $text): array {
$url = 'https://evolution.31-97-244-109.sslip.io/message/sendText/GetPasq';
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'apikey: ' . getenv('ENVIOZAP_API_KEY'),
],
CURLOPT_POSTFIELDS => json_encode([
'number' => preg_replace('/\D/', '', $number),
'text' => $text,
]),
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("EnvioZap HTTP $status: $response");
}
return json_decode($response, true);
}
import os, re, requests
URL = "https://evolution.31-97-244-109.sslip.io"
KEY = os.environ["ENVIOZAP_API_KEY"]
INSTANCE = "GetPasq"
def send_whatsapp(number: str, text: str) -> dict:
clean = re.sub(r"\D", "", number)
r = requests.post(
f"{URL}/message/sendText/{INSTANCE}",
headers={"Content-Type": "application/json", "apikey": KEY},
json={"number": clean, "text": text},
timeout=30,
)
r.raise_for_status()
return r.json()
use Illuminate\Support\Facades\Http;
Http::withHeaders([
'apikey' => config('services.enviozap.key'),
])->post(
'https://evolution.31-97-244-109.sslip.io/message/sendText/GetPasq',
[
'number' => '5511999999999',
'text' => 'Seu pedido foi enviado!',
]
);
Erros comuns
| HTTP | Causa | Ação |
|---|---|---|
401 | API Key inválida/ausente | Conferir header apikey |
404 | Instância inexistente | Listar com fetchInstances |
400 | Body/número inválido | Usar só dígitos com DDI |
500 | Instância offline / falha | Checar status = open |
Boas práticas
- Chame a API somente pelo backend.
- Valide
connectionState = openantes de lotes. - Normalize números (remover espaços, +, hífens).
- Evite spam; prefira contatos com janela de conversa.
- Persista o ID da mensagem retornado para rastreio.
Fluxo recomendado
1. Backend guarda ENVIOZAP_API_KEY
2. GET /instance/connectionState/{instance} → "open"
3. POST /message/sendText/{instance} → dispara
4. Salva message id na sua base
URLs do ambiente
| Serviço | URL |
|---|---|
| API | https://evolution.31-97-244-109.sslip.io |
| Manager | /manager/ |
| Teste visual | test.31-97-244-109.sslip.io |
| Docs | docs.31-97-244-109.sslip.io |