Receba notificações automáticas da Nucleo Pay sempre que algo importante acontecer — como um pagamento PIX aprovado.
Pense nos webhooks como mensagens enviadas pela Nucleo Pay para o seu sistema, sem que você precise ficar consultando a API o tempo todo.
Sem webhooks, sua aplicação teria que perguntar para a API a cada poucos segundos: "Esse pagamento já foi confirmado?" Isso é lento e ineficiente.
Com webhooks, a Nucleo Pay avisa você imediatamente quando o pagamento for confirmado. Assim você pode:
https://meusite.com/webhooks/nucleopayPOST /api/webhooks/createWebhooks precisam ser seguros — qualquer pessoa poderia tentar enviar requisições falsas. Por isso validamos cada entrega com assinatura HMAC.
Cada webhook enviado pela Nucleo Pay inclui o header:
X-NucleoPay-Signature: sha256={hex}
A assinatura é gerada com HMAC-SHA256 do corpo JSON bruto, usando o secret do webhook (whsec_...), retornado uma única vez ao criar o webhook.
Seu backend deve recalcular a assinatura e comparar. Se for igual, o evento é legítimo.
import crypto from "node:crypto";
export function verifyNucleoSignature(rawBody, signatureHeader, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody, "utf8")
.digest("hex");
const received = String(signatureHeader || "").replace(/^sha256=/, "");
return crypto.timingSafeEqual(
Buffer.from(expected, "hex"),
Buffer.from(received, "hex")
);
}
Ou use POST /api/webhooks/create com Bearer token.
Endpoint que receberá os eventos POST.
Use ["*"] para todos ou liste eventos específicos.
O secret é exibido apenas na criação. Use-o para validar assinaturas.
POST /api/webhooks/create
Authorization: Bearer SEU_TOKEN
Content-Type: application/json
{
"url": "https://meusite.com/webhooks/nucleopay",
"events": ["charge.approved", "charge.created"]
}
| Evento | Quando é disparado |
|---|---|
charge.created | Cobrança PIX criada |
charge.approved | Pagamento confirmado |
charge.declined | Pagamento recusado ou expirado |
charge.refund | Reembolso processado |
charge.updated | Status ou dados atualizados |
charge.pending | Cobrança aguardando pagamento |
webhook.test | Evento de teste (POST /api/webhooks/test) |
{
"event": "charge.approved",
"timestamp": "2026-07-07T20:00:00.000Z",
"data": {
"chargeId": "ch_abc123",
"order_id": "pedido-42",
"status": "Aprovado",
"value": 49.9,
"title": "Meu produto",
"external_id": "pedido-42",
"customer_name": "João",
"customer_email": "joao@email.com",
"provider": "onlyup",
"createdAt": "2026-07-07T19:55:00.000Z",
"approvedAt": "2026-07-07T20:00:00.000Z"
}
}