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 URLhttps://evolution.31-97-244-109.sslip.io
AuthHeader apikey
FormatoJSON · UTF-8
Teste visualtest.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

CampoTipoObrigatórioDescrição
numberstringsimTelefone só dígitos, com DDI+DDD. Ex: 5511999999999
textstringsimConteú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

CorretoIncorreto
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

HTTPCausaAção
401API Key inválida/ausenteConferir header apikey
404Instância inexistenteListar com fetchInstances
400Body/número inválidoUsar só dígitos com DDI
500Instância offline / falhaChecar status = open

Boas práticas

  1. Chame a API somente pelo backend.
  2. Valide connectionState = open antes de lotes.
  3. Normalize números (remover espaços, +, hífens).
  4. Evite spam; prefira contatos com janela de conversa.
  5. 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çoURL
APIhttps://evolution.31-97-244-109.sslip.io
Manager/manager/
Teste visualtest.31-97-244-109.sslip.io
Docsdocs.31-97-244-109.sslip.io