Stream da instância
/v1/instances/{id}/eventsdesde M3token da instância ou adminQuando usar
Server-Sent Events com os eventos de uma instância. Cada evento sai como id, event (tipo) e data (o envelope JSON). A cada 15 segundos vai um comentário : ping. Não há replay (Last-Event-ID é ignorado). Um cliente mais de 256 eventos atrasado recebe event: error (slow_consumer) e é desconectado: reconecte. O token é checado só na conexão.
Autenticação
Aceita o token da instância (só a própria instância) ou o token admin. Um token de outra instância recebe 403 forbidden (ou 404 not_found em webhooks de outra instância).
Parâmetros
Caminho
| Nome | Tipo | Descrição |
|---|---|---|
idobrigatório | string | Id da instância (inst_...). |
Query
| Nome | Tipo | Descrição |
|---|---|---|
types | string | Filtro separado por vírgulas: tipos exatos (instance.status), famílias (message.*) ou *. Omitido: todos. chat.presence, status.received e channel.message são opt-in: nem * nem a omissão os incluem (use *,chat.presence,status.received). |
Exemplo
curl -sN "$LITEZAP_URL/v1/instances/$ID/events?types=message.*%2Cinstance.status" \ -H "Authorization: Bearer $LITEZAP_TOKEN"const res = await fetch("http://localhost:8787/v1/instances/inst_7f3a9c2e5b1d4086/events?types=message.*%2Cinstance.status", { headers: { Authorization: `Bearer ${process.env.LITEZAP_TOKEN}` },});const reader = res.body.pipeThrough(new TextDecoderStream()).getReader();for (;;) { const { value, done } = await reader.read(); if (done) break; process.stdout.write(value); // linhas "id:", "event:" e "data:" (envelope JSON)}import osimport requests
r = requests.get( "http://localhost:8787/v1/instances/inst_7f3a9c2e5b1d4086/events", headers={"Authorization": f"Bearer {os.environ['LITEZAP_TOKEN']}"}, params={ "types": "message.*,instance.status", }, stream=True, timeout=None,)for line in r.iter_lines(decode_unicode=True): if line.startswith("data: "): print(line[6:]) # envelope JSONpackage main
import ( "bufio" "fmt" "net/http" "os")
func main() { req, _ := http.NewRequest("GET", "http://localhost:8787/v1/instances/inst_7f3a9c2e5b1d4086/events?types=message.*%2Cinstance.status", nil) req.Header.Set("Authorization", "Bearer "+os.Getenv("LITEZAP_TOKEN")) resp, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer resp.Body.Close() sc := bufio.NewScanner(resp.Body) for sc.Scan() { fmt.Println(sc.Text()) // "id:", "event:" e "data:" (envelope JSON) }}<?php$ch = curl_init('http://localhost:8787/v1/instances/inst_7f3a9c2e5b1d4086/events?types=message.*%2Cinstance.status');curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('LITEZAP_TOKEN')], CURLOPT_TIMEOUT => 0, CURLOPT_WRITEFUNCTION => function ($ch, $chunk) { echo $chunk; // linhas "id:", "event:" e "data:" (envelope JSON) return strlen($chunk); },]);curl_exec($ch);Nos exemplos, LITEZAP_URL é a URL base (ex.: http://localhost:8787) e o token vem deLITEZAP_TOKEN (instância) ou LITEZAP_ADMIN_TOKEN.
Resposta
200 Stream text/event-stream, aberto até o cliente sair. Também: text/event-stream.
retry: 3000: connected
id: evt_5f2c9a1b7d3e4f60event: message.receiveddata: {"id":"evt_5f2c9a1b7d3e4f60","type":"message.received","version":1,"instance_id":"inst_7f3a9c2e5b1d4086","timestamp":"2026-10-17T13:45:00.123Z","data":{"id":"msg_e29d4b8a0f6c1357","chat":"[email protected]","from_me":false,"source":"contact","type":"text","text":"Oi!","timestamp":"2026-10-17T13:45:00Z"}}
: pingErros
| Código | HTTP | Retentável | O que fazer |
|---|---|---|---|
validation_failed | 400 | não | Corrija o corpo ou os parâmetros; a message diz o campo. |
unauthorized | 401 | não | Envie Authorization: Bearer <token> válido. |
forbidden | 403 | não | Use o token certo (admin, ou o da própria instância). |
instance_not_found | 404 | não | Confira o id da instância. |
Todo erro usa o envelope {"error":{"code","message","retryable"}}. Tabela completa em Erros.
Equivalente na Z-API: (sem equivalente). Veja Migrar da Z-API.
Outras operações de Eventos em tempo real: Assinar presença de um contato · Stream global

