Webhooks

Eventos & assinatura

Cadastre endpoints HTTPS para receber eventos da Stater. Cada endpoint tem um secret usado para assinar os payloads.

Criar endpoint

POST/v1/webhook-endpoints

Escopo: webhooks:manage.

urlstring (https)required

URL pública para entrega.

eventsstring[]required

Lista de tipos a inscrever.

accountIduuidoptional

Filtra eventos só desta conta. Cliente restrito deve usar a própria conta ou omitir.

Secret só aparece uma vez

O campo secret só é retornado na criação. Guarde-o com segurança — é necessário para validar a assinatura.

Outras operações

GET/v1/webhook-endpoints
PATCH/v1/webhook-endpoints/:id
DELETE/v1/webhook-endpoints/:id
POST/v1/webhook-events/test

PATCH aceita url, events, enabled. DELETE responde 204 sem corpo. O endpoint de teste responde202 { "queued": true }.

Formato da entrega

O worker envia POST para sua url com:

json
{
  "id": "<uuid>",
  "type": "<eventType>",
  "created_at": "<iso>",
  "data": { }
}

Cabeçalhos

HeaderDescrição
webhook-idID único do evento
webhook-timestampUnix em segundos
webhook-signatureHMAC-SHA256 hex de {timestamp}.{payload} com o secret

Resposta esperada

Retorne qualquer 2xx para marcar a entrega como sucesso.

Verificando a assinatura (Node.js)

javascript
import crypto from "node:crypto";

function verify(req, secret) {
  const ts = req.headers["webhook-timestamp"];
  const sig = req.headers["webhook-signature"];
  const payload = JSON.stringify(req.body);
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${ts}.${payload}`)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(sig, "hex"),
    Buffer.from(expected, "hex"),
  );
}

Tipos de evento

eventTypeQuando
pix.deposit_qr.createdQR criado via API Stater
pix.deposit_qr.provider_webhookWebhook do provedor de criação/sync de QR
pix.charge.completedPIX in confirmado (inclui QR pago)
pix.charge.refundedEstorno MED / chargeback
pix.charge.refund_errorFalha de estorno reportada pelo provedor
pix.payout.succeededPIX out concluído
pix.payout.failedPIX out falhou
pix.payout.refundedReembolso de PIX out
webhook.testDisparo manual de teste