Webhooks de saída

Receba eventos em tempo real para automações de WhatsApp (n8n, Evolution API, Zapbot), e-mail, CRM e ERP. Cadastre a URL em Integrações → Webhooks.

Eventos

CampoTipoDescrição
cart.abandonedeventoCarrinho abandonado
order.createdeventoPedido criado
pix.generatedeventoPIX gerado
purchase.approvedeventoCompra aprovada
purchase.refusedeventoCompra recusada
purchase.refundedeventoCompra reembolsada
purchase.chargebackeventoChargeback
enrollment.grantedeventoAcesso liberado na área de membros

Formato

POST https://sua-url

Content-Type: application/json
User-Agent: Guava-Webhooks/1.0
X-Guava-Event: purchase.approved
X-Guava-Delivery: <id da entrega>
X-Guava-Signature: t=1791246602,v1=<hex>

{
  "id": "evt_…",
  "type": "purchase.approved",
  "created_at": "2026-10-06T00:33:57.000Z",
  "data": {
    "id": "ord_…", "code": "GVREGW8JYR", "status": "paid",
    "total_cents": 30780, "subtotal_cents": 32400, "discount_cents": 1620, "interest_cents": 0,
    "payment_method": "pix", "installments": 1,
    "customer": { "name": "Maria Silva", "email": "maria@email.com", "phone": "11987654321", "document": "52998224725" },
    "items": [{ "name": "Método Foco Total", "kind": "main", "quantity": 1, "unit_price_cents": 29700 }],
    "pix": { "copy_paste": "000201…", "expires_at": "…" },
    "utm": { "utm_source": "instagram" },
    "order_url": "https://app.guava.com.br/pedido/<token>"
  }
}

No evento cart.abandoned, data traz o contato do cliente e a checkout_url para enviar no WhatsApp. No pix.generated, use pix.copy_paste eorder_url para lembrar o cliente de pagar.

Validando a assinatura

Node.js

import crypto from "node:crypto";

export function isValidGuavaSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false;
  const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1 ?? ""));
}

Entrega e retentativas

Responda com qualquer status 2xx em até 10 segundos. Em caso de falha, reenviamos em 1 min, 5 min, 30 min, 2 h, 6 h, 12 h e 24 h (8 tentativas). Cada entrega tem umX-Guava-Delivery único e o mesmo id de evento: use-o para ignorar duplicatas. Você pode reenviar manualmente no painel.