Eventos · Pagamentos
Pagamentos
Eventos de cobrança PIX (API v1, links e checkouts). O evento crítico para liberar produto é payment.paid.
Valide HMAC, confira
status === "paid" e use external_id para amarrar ao pedido interno. Idempotência por event.id.Eventos
| Evento | Quando | Uso |
|---|---|---|
payment.created | Pagamento criado (API) | Log / analytics |
| payment.paid | Pagamento confirmado | Liberar produto / crédito |
payment.expired | Pendente expirou | Liberar estoque |
payment.failed | Falha no processamento | Notificar usuário |
payment.refunded | Estorno | Revogar acesso |
Payload payment.paid
Campos em data.object (v2):
| Campo | Tipo | Descrição |
|---|---|---|
id | string | UUID do pagamento |
status | string | Deve ser paid |
amount_cents | number | Centavos |
external_id | string | null | Seu ID |
payment_method | string | pix, card… |
customer | object | name, email, document, phone |
metadata | object | null | JSON livre |
paid_at | string | null | ISO |
Regras para liberar o produto
- Assinatura HMAC válida
type===payment.paidstatus===paid- Confira
amount_centsse souber o valor - Use
external_idouid - Ignore event.id já processado
- Responda 200 rápido
Handler de exemplo
async function handleHyzePayWebhook(event: any) {
const type = event.type || event.event;
const payment =
event.api_version === "v1" || event.event
? event.data
: event.data?.object;
if (type !== "payment.paid") return;
if (payment?.status !== "paid") throw new Error("Status inválido");
const orderKey = payment.external_id || payment.id;
await markOrderPaidInMySystem({
orderKey,
amountCents: payment.amount_cents,
hyzePayId: payment.id,
eventId: event.id || event.event_id,
});
}