Primeiros Passos

Este guia vai te ajudar a criar sua primeira instancia, conectar um numero WhatsApp e enviar sua primeira mensagem.

Pre-requisitos

Dica: Todas as requisicoes usam o header apikey para autenticacao. Rotas administrativas usam a chave global, rotas de instancia usam o token retornado na criacao.
API Versionada: Todos os endpoints estao disponiveis com o prefixo /api/v1/ (recomendado). Exemplo: POST /api/v1/send/text. As rotas sem prefixo (POST /send/text) continuam funcionando, mas estao marcadas como deprecated e serao removidas a partir de 2027-01-01. Respostas nas rotas legadas incluem os headers Deprecation: true e Sunset: 2027-01-01.
1

Criar uma Instancia

Uma instancia representa uma sessao do WhatsApp. Voce pode criar quantas precisar.

cURL
Python
Node.js
Go
curl -X POST http://localhost:4000/instance/create \
  -H "apikey: SUA_CHAVE_GLOBAL" \
  -H "Content-Type: application/json" \
  -d '{
    "instanceName": "meu-whatsapp",
    "webhookUrl": "https://meusite.com/webhook"
  }'
import requests

resp = requests.post(
    "http://localhost:4000/instance/create",
    headers={
        "apikey": "SUA_CHAVE_GLOBAL",
        "Content-Type": "application/json"
    },
    json={
        "instanceName": "meu-whatsapp",
        "webhookUrl": "https://meusite.com/webhook"
    }
)
data = resp.json()
print(f"Token: {data['token']}")
print(f"Instance ID: {data['instanceId']}")
const resp = await fetch("http://localhost:4000/instance/create", {
  method: "POST",
  headers: {
    "apikey": "SUA_CHAVE_GLOBAL",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    instanceName: "meu-whatsapp",
    webhookUrl: "https://meusite.com/webhook"
  })
});
const data = await resp.json();
console.log("Token:", data.token);
console.log("Instance ID:", data.instanceId);
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    body, _ := json.Marshal(map[string]string{
        "instanceName": "meu-whatsapp",
        "webhookUrl":   "https://meusite.com/webhook",
    })
    req, _ := http.NewRequest("POST", "http://localhost:4000/instance/create", bytes.NewBuffer(body))
    req.Header.Set("apikey", "SUA_CHAVE_GLOBAL")
    req.Header.Set("Content-Type", "application/json")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println("Token:", result["token"])
    fmt.Println("Instance ID:", result["instanceId"])
}

A resposta inclui um token unico para essa instancia. Guarde esse token — ele sera usado em todas as requisicoes subsequentes.

{
  "instanceId": "abc123-...",
  "instanceName": "meu-whatsapp",
  "token": "9f4e2d1a8b7c6e5f...",
  "webhookUrl": "https://meusite.com/webhook",
  "status": "created"
}
2

Conectar o WhatsApp (QR Code)

Apos criar a instancia, voce precisa conectar um numero de WhatsApp. Existem duas formas: QR Code ou Pairing Code.

Opcao A: QR Code

# 1. Iniciar conexao
curl -X POST http://localhost:4000/instance/connect \
  -H "apikey: TOKEN_DA_INSTANCIA"

# 2. Obter QR code (retorna base64 da imagem)
curl http://localhost:4000/instance/qr \
  -H "apikey: TOKEN_DA_INSTANCIA"

Abra o WhatsApp no celular → Configuracoes → Aparelhos Conectados → Conectar Aparelho → Escaneie o QR code.

Opcao B: Pairing Code (sem QR)

curl -X POST http://localhost:4000/instance/pair \
  -H "apikey: TOKEN_DA_INSTANCIA" \
  -H "Content-Type: application/json" \
  -d '{"number": "5511999999999"}'

O servidor retorna um codigo de 8 digitos. No celular: Configuracoes → Aparelhos Conectados → Conectar Aparelho → Conectar com numero de telefone → Digite o codigo.

Verificar Status

curl http://localhost:4000/instance/status \
  -H "apikey: TOKEN_DA_INSTANCIA"

# Resposta quando conectado:
# {"status": "CONNECTED", "number": "5511999999999"}
3

Enviar Primeira Mensagem

Com a instancia conectada, voce pode enviar mensagens para qualquer numero.

cURL
Python
Node.js
Go
curl -X POST http://localhost:4000/send/text \
  -H "apikey: TOKEN_DA_INSTANCIA" \
  -H "Content-Type: application/json" \
  -d '{
    "number": "5511888888888",
    "text": "Ola! Esta e minha primeira mensagem via NeoGo API."
  }'
import requests

resp = requests.post(
    "http://localhost:4000/send/text",
    headers={
        "apikey": "TOKEN_DA_INSTANCIA",
        "Content-Type": "application/json"
    },
    json={
        "number": "5511888888888",
        "text": "Ola! Esta e minha primeira mensagem via NeoGo API."
    }
)
print(resp.json())
const resp = await fetch("http://localhost:4000/send/text", {
  method: "POST",
  headers: {
    "apikey": "TOKEN_DA_INSTANCIA",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    number: "5511888888888",
    text: "Ola! Esta e minha primeira mensagem via NeoGo API."
  })
});
console.log(await resp.json());
body, _ := json.Marshal(map[string]string{
    "number": "5511888888888",
    "text":   "Ola! Esta e minha primeira mensagem via NeoGo API.",
})
req, _ := http.NewRequest("POST", "http://localhost:4000/send/text", bytes.NewBuffer(body))
req.Header.Set("apikey", "TOKEN_DA_INSTANCIA")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
// handle response...
Formato do numero: Use apenas digitos, incluindo o codigo do pais (55 para Brasil). Exemplos: 5511999999999 (celular SP), 5521888888888 (celular RJ). A API normaliza automaticamente para o formato JID do WhatsApp.
4

Receber Webhooks

Configure uma URL de webhook para receber eventos em tempo real (mensagens recebidas, status de conexao, etc.).

Se voce definiu webhookUrl ao criar a instancia, os eventos ja serao enviados para la. Caso contrario, configure depois:

# A URL de webhook e definida na criacao da instancia.
# Para testar localmente, use ngrok ou similar:
ngrok http 3000

# Exemplo de servidor para receber webhooks (Node.js):
const express = require('express');
const app = express();
app.use(express.json());

app.post('/webhook', (req, res) => {
  const event = req.body;
  console.log(`Evento: ${event.event}`);
  console.log(`Dados:`, event.data);

  // Verificar assinatura HMAC (opcional, mas recomendado)
  const signature = req.headers['x-webhook-signature'];
  // ... validar com sua chave

  res.sendStatus(200);
});

app.listen(3000);

Veja a documentacao completa de webhooks em Webhooks.

Outros Tipos de Envio

Alem de texto, a NeoGo API suporta diversos tipos de mensagem:

TipoEndpointDescricao
TextoPOST /send/textMensagem de texto simples
MidiaPOST /send/mediaImagem, video, audio ou documento
LinkPOST /send/linkLink com preview
LocalizacaoPOST /send/locationCoordenadas GPS
ContatoPOST /send/contactCartao de contato (vCard)
BotaoPOST /send/buttonMensagem com botoes interativos
ListaPOST /send/listMenu de opcoes em lista
EnquetePOST /send/pollEnquete com multiplas opcoes
StickerPOST /send/stickerFigurinha (WebP)
PixPOST /send/pixChave Pix para pagamento
CarrosselPOST /send/carouselCards horizontais com botoes
ForwardPOST /send/forwardEncaminhar mensagem existente
BatchPOST /send/batch/textEnvio em massa de texto
Status (texto)POST /send/status/textPublicar texto no status/stories
Status (midia)POST /send/status/mediaPublicar midia no status/stories

Proximos Passos