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
| Campo | Tipo | Descrição |
|---|---|---|
| cart.abandoned | evento | Carrinho abandonado |
| order.created | evento | Pedido criado |
| pix.generated | evento | PIX gerado |
| purchase.approved | evento | Compra aprovada |
| purchase.refused | evento | Compra recusada |
| purchase.refunded | evento | Compra reembolsada |
| purchase.chargeback | evento | Chargeback |
| enrollment.granted | evento | Acesso 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.