Instvia Instvia Developers
v1.0.0 Abrir console
POST https://seu-erp.com/hooks/instvia

Webhook — Instvia → seu sistema

Configure a URL via POST /instances/{instance}/webhook. A Instvia envia um POST JSON quando a sessão muda de status ou quando mensagens entram/saem. Valide sempre a assinatura HMAC antes de processar o body.

Headers enviados

HeaderDescrição
Content-Type `application/json`
X-Webhook-Event Tipo do evento (ex.: `message.received`).
X-Webhook-Delivery UUID da entrega; permanece igual entre retries (idempotência).
X-Webhook-Timestamp Unix timestamp usado na assinatura.
X-Webhook-Signature HMAC-SHA256 de `{timestamp}.{raw_body}` com o secret retornado na criação do webhook.

Tipos de evento

instance.qr instance.connecting instance.connected instance.disconnected instance.reconnecting instance.error message.queued message.sent message.delivered message.read message.failed message.received

Instância conectada

Disparado quando a sessão WhatsApp fica conectada (após QR).

X-Webhook-Event instance.connected

Body (request)

{
    "id": "evt_01instance_connected",
    "event": "instance.connected",
    "created_at": "2026-08-25T18:00:00+00:00",
    "instance": {
        "id": "dac3a956-4e8b-4d76-8caf-fed98dfc8b05",
        "name": "Financeiro"
    },
    "data": {
        "status": "CONNECTED",
        "phone": "556181637717"
    }
}

Mensagem recebida

WhatsApp enviou uma mensagem para o número pareado.

X-Webhook-Event message.received

Body (request)

{
    "id": "evt_01message_received",
    "event": "message.received",
    "created_at": "2026-08-25T18:12:00+00:00",
    "instance": {
        "id": "dac3a956-4e8b-4d76-8caf-fed98dfc8b05",
        "name": "Financeiro"
    },
    "data": {
        "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "direction": "INBOUND",
        "type": "TEXT",
        "from": "5561991299129",
        "to": "556181637717",
        "peer": "5561991299129",
        "content": "Oi, recebi o boleto?",
        "status": "RECEIVED",
        "remote_id": "3EB0XXXX"
    }
}

Mensagem enviada

Status de uma mensagem outbound que saiu da fila e foi aceita pelo WhatsApp.

X-Webhook-Event message.sent

Body (request)

{
    "id": "evt_01message_sent",
    "event": "message.sent",
    "created_at": "2026-08-25T18:10:05+00:00",
    "instance": {
        "id": "dac3a956-4e8b-4d76-8caf-fed98dfc8b05",
        "name": "Financeiro"
    },
    "data": {
        "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "status": "SENT",
        "remote_id": "3EB0YYYY",
        "sent_at": "2026-08-25T18:10:05+00:00"
    }
}

Validar assinatura (PHP)

HMAC-SHA256 de {timestamp}.{raw_body} com o secret retornado na criação do webhook.

<?php
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$timestamp = $_SERVER['HTTP_X_WEBHOOK_TIMESTAMP'] ?? '';
$secret = getenv('INSTVIA_WEBHOOK_SECRET');

$expected = hash_hmac('sha256', $timestamp . '.' . $payload, $secret);
if (! hash_equals($expected, $signature)) {
    http_response_code(401);
    exit('Invalid signature');
}

$data = json_decode($payload, true);