Skip to content

API de Inst\u00e2ncias WhatsApp

As inst\u00e2ncias s\u00e3o conex\u00f5es individuais com o WhatsApp. Cada inst\u00e2ncia pode estar conectada a um n\u00famero diferente.

Endpoints Dispon\u00edveis

Listar Inst\u00e2ncias

Lista todas as inst\u00e2ncias do tenant.

http
GET /whatsapp/instances
Cookie: auth-session=...

Resposta de Sucesso (200)

json
{
  "success": true,
  "data": [
    {
      "id": "inst_abc123",
      "name": "Atendimento Principal",
      "phone": "+5511999999999",
      "status": "connected",
      "webhookUrl": "https://seu-webhook.com",
      "createdAt": "2024-01-15T10:00:00Z",
      "active": true
    }
  ]
}

Criar Inst\u00e2ncia

Cria uma nova inst\u00e2ncia do WhatsApp.

http
POST /whatsapp/instances
Cookie: auth-session=...
Content-Type: application/json

Corpo da Requisi\u00e7\u00e3o

json
{
  "name": "Nova Inst\u00e2ncia",
  "webhookUrl": "https://seu-webhook.com/whatsapp"
}

Par\u00e2metros

CampoTipoObrigat\u00f3rioDescri\u00e7\u00e3o
namestringSimNome da inst\u00e2ncia (3-50 caracteres)
webhookUrlstringN\u00e3oURL para receber eventos

Resposta de Sucesso (201)

json
{
  "success": true,
  "data": {
    "instanceId": "inst_xyz789",
    "instanceName": "Nova Inst\u00e2ncia",
    "status": "created",
    "integration": "WHATSAPP-BAILEYS",
    "webhookUrl": "https://seu-webhook.com/whatsapp"
  }
}

Obter Detalhes da Inst\u00e2ncia

Retorna informa\u00e7\u00f5es detalhadas de uma inst\u00e2ncia.

http
GET /whatsapp/instances/{instanceId}
Cookie: auth-session=...

Resposta de Sucesso (200)

json
{
  "success": true,
  "data": {
    "id": "inst_abc123",
    "name": "Atendimento Principal",
    "phone": "+5511999999999",
    "status": "connected",
    "integration": "WHATSAPP-BAILEYS",
    "webhookUrl": "https://seu-webhook.com",
    "profilePicUrl": "https://...",
    "active": true,
    "createdAt": "2024-01-15T10:00:00Z",
    "updatedAt": "2024-01-15T14:00:00Z"
  }
}

Atualizar Inst\u00e2ncia

Atualiza configura\u00e7\u00f5es de uma inst\u00e2ncia.

http
PUT /whatsapp/instances/{instanceId}
Cookie: auth-session=...
Content-Type: application/json

Corpo da Requisi\u00e7\u00e3o

json
{
  "name": "Novo Nome",
  "webhookUrl": "https://novo-webhook.com"
}

Deletar Inst\u00e2ncia

Remove permanentemente uma inst\u00e2ncia.

http
DELETE /whatsapp/instances/{instanceId}
Cookie: auth-session=...

Cuidado

Esta a\u00e7\u00e3o \u00e9 irrevers\u00edvel! Todos os dados da inst\u00e2ncia ser\u00e3o perdidos.

Resposta de Sucesso (200)

json
{
  "success": true,
  "message": "Instance deleted successfully"
}

Gerenciamento de Conex\u00e3o

Obter QR Code

Ap\u00f3s criar uma inst\u00e2ncia, um QR Code \u00e9 gerado automaticamente para conex\u00e3o.

http
GET /whatsapp/instances/{instanceId}
Cookie: auth-session=...

A resposta incluir\u00e1 o campo qrCode quando dispon\u00edvel:

json
{
  "success": true,
  "data": {
    "id": "inst_abc123",
    "status": "qr",
    "qrCode": {
      "base64": "data:image/png;base64,iVBORw0KGgo...",
      "expiry": 20,
      "attemptId": "qr_attempt_1"
    }
  }
}

Expira\u00e7\u00e3o do QR Code

  • Cada QR Code expira em 20 segundos
  • M\u00e1ximo de 6 tentativas (2 minutos total)
  • Ap\u00f3s expirar todas as tentativas, use o endpoint de regenera\u00e7\u00e3o

Regenerar QR Code

Gera um novo conjunto de QR Codes ap\u00f3s expira\u00e7\u00e3o.

http
POST /whatsapp/instances/{instanceId}/regenerate-qr
Cookie: auth-session=...

Desconectar Inst\u00e2ncia

Desconecta uma inst\u00e2ncia do WhatsApp.

http
POST /whatsapp/instances/{instanceId}/disconnect
Cookie: auth-session=...

Status da Inst\u00e2ncia

StatusDescri\u00e7\u00e3o
createdInst\u00e2ncia criada, aguardando configura\u00e7\u00e3o
qrQR Code dispon\u00edvel para escanear
connectedConectado e operacional
disconnectedDesconectado temporariamente
bannedN\u00famero banido pelo WhatsApp

Enviando Mensagens

Enviar Texto

http
POST /whatsapp/instances/{instanceId}/send-text
Cookie: auth-session=...
Content-Type: application/json

Corpo da Requisi\u00e7\u00e3o

json
{
  "to": "5511999999999",
  "message": "Ol\u00e1! Esta \u00e9 uma mensagem de teste."
}

Enviar M\u00eddia

http
POST /whatsapp/instances/{instanceId}/send-media
Cookie: auth-session=...
Content-Type: application/json

Corpo da Requisi\u00e7\u00e3o

json
{
  "to": "5511999999999",
  "mediaUrl": "https://exemplo.com/imagem.jpg",
  "mediaType": "image",
  "caption": "Legenda opcional"
}

Tipos de M\u00eddia Suportados

  • image - Imagens (JPEG, PNG)
  • video - V\u00eddeos (MP4)
  • audio - \u00c1udios (MP3, OGG)
  • document - Documentos (PDF, DOC, etc)

Limites

Os limites de inst\u00e2ncias dependem do seu plano:

PlanoM\u00e1ximo de Inst\u00e2ncias
Starter1
Pro5
Enterprise50

Exemplos de C\u00f3digo

Criar e Conectar Inst\u00e2ncia

javascript
const axios = require('axios');

async function createAndConnect() {
  const baseURL = 'https://api.zapflare.io';
  
  // 1. Fazer login primeiro
  const loginResponse = await axios.post(
    `${baseURL}/auth/sessions`,
    {
      email: 'seu@email.com',
      password: 'sua-senha'
    },
    {
      withCredentials: true
    }
  );
  
  // 2. Criar inst\u00e2ncia
  const createResponse = await axios.post(
    `${baseURL}/whatsapp/instances`,
    {
      name: 'Minha Inst\u00e2ncia',
      webhookUrl: 'https://meu-webhook.com'
    },
    {
      withCredentials: true
    }
  );
  
  const instance = createResponse.data.data;
  console.log('Inst\u00e2ncia criada:', instance.instanceId);
  
  // 3. Aguardar QR Code
  let connected = false;
  while (!connected) {
    await new Promise(resolve => setTimeout(resolve, 3000));
    
    const statusResponse = await axios.get(
      `${baseURL}/whatsapp/instances/${instance.instanceId}`,
      {
        withCredentials: true
      }
    );
    
    const data = statusResponse.data.data;
    
    if (data.qrCode) {
      console.log('QR Code:', data.qrCode.base64);
      // Exibir QR Code para o usu\u00e1rio escanear
    }
    
    if (data.status === 'connected') {
      connected = true;
      console.log('Conectado! N\u00famero:', data.phone);
    }
  }
}

createAndConnect().catch(console.error);
python
import requests
import time
import base64
from PIL import Image
from io import BytesIO

def create_and_connect():
    base_url = 'https://api.zapflare.io'
    session = requests.Session()
    
    # 1. Fazer login
    login_response = session.post(
        f'{base_url}/auth/sessions',
        json={
            'email': 'seu@email.com',
            'password': 'sua-senha'
        }
    )
    
    # 2. Criar inst\u00e2ncia
    create_response = session.post(
        f'{base_url}/whatsapp/instances',
        json={
            'name': 'Minha Inst\u00e2ncia',
            'webhookUrl': 'https://meu-webhook.com'
        }
    )
    
    instance = create_response.json()['data']
    print(f'Inst\u00e2ncia criada: {instance["instanceId"]}')
    
    # 3. Aguardar conex\u00e3o
    connected = False
    while not connected:
        time.sleep(3)
        
        status_response = session.get(
            f'{base_url}/whatsapp/instances/{instance["instanceId"]}'
        )
        
        data = status_response.json()['data']
        
        if 'qrCode' in data:
            # Decodificar e mostrar QR Code
            qr_data = data['qrCode']['base64'].split(',')[1]
            img = Image.open(BytesIO(base64.b64decode(qr_data)))
            img.show()
        
        if data['status'] == 'connected':
            connected = True
            print(f'Conectado! N\u00famero: {data["phone"]}')

create_and_connect()

Webhooks

Quando eventos ocorrem em uma inst\u00e2ncia, o ZapFlare envia notifica\u00e7\u00f5es para o webhook configurado.

Estrutura do Webhook

json
{
  "event": "messages.upsert",
  "instance": {
    "instanceName": "Minha Inst\u00e2ncia",
    "instanceId": "inst_abc123"
  },
  "data": {
    "key": {
      "remoteJid": "5511999999999@s.whatsapp.net",
      "fromMe": false,
      "id": "BAE5C8F9A2B4E231"
    },
    "message": {
      "conversation": "Ol\u00e1!",
      "messageTimestamp": "1704456789"
    },
    "messageType": "conversation",
    "pushName": "Jo\u00e3o Silva"
  }
}

Eventos Dispon\u00edveis

  • connection.update - Mudan\u00e7as no status da conex\u00e3o
  • messages.upsert - Nova mensagem recebida ou enviada
  • messages.update - Atualiza\u00e7\u00e3o de status de mensagem
  • messages.delete - Mensagem deletada
  • groups.update - Atualiza\u00e7\u00f5es em grupos
  • groups.upsert - Novo grupo criado
  • contacts.update - Atualiza\u00e7\u00f5es de contatos
  • presence.update - Status online/offline

Pr\u00f3ximos Passos

Desenvolvido com ❤️ pela equipe ZapFlare