whsec_..., exibido uma vez. Guarde-o no seu servidor. Endereços privados, localhost, IP literal e redirecionamentos não são aceitos.
Eventos
Cada POST usa JSON com
id (ID do evento), type, createdAt e data (id do pagamento, operationId do negócio, kind, status, amountCents, createdAt, updatedAt). Os endpoints recebem eventos de todos os negócios da conta; use data.operationId para identificá-los. O mesmo evento mantém o mesmo corpo e ID nas tentativas de entrega.
Novos saques podem incluir data.debitAmountCents (total descontado), data.feeCents (tarifa da conta), data.expectedNetAmountCents (líquido previsto) e data.netAmountCents (líquido informado pela liquidante). Para saques, amountCents é o valor bruto com a taxa incluída. Em transfer.completed, consulte o líquido confirmado; não desconte a taxa novamente.
Cartão usa os mesmos eventos payment.*, com data.paymentMethod: "card", feeCents, expectedNetAmountCents e releaseAt quando disponível. payment.paid informa aprovação; o saldo permanece em retenção até a liberação confirmada e o crédito no ledger do negócio. Consulte GET /payments/{id} para cardSettlementStatus. Recusa com nova tentativa no checkout pode manter o estado pendente e não gerar um evento novo.
Assinatura
O headerX-Master-Signature tem o formato t=UNIX_SECONDS,v1=HEX_HMAC. Calcule HMAC-SHA256 com o segredo do endpoint sobre t + "." + corpo bruto da requisição. Compare em tempo constante e rejeite timestamps com diferença superior a cinco minutos. Não analise e serialize novamente o JSON antes de verificar: isso altera os bytes assinados.
Entrega e repetição
Responda com HTTP 2xx em até 8 segundos. Falhas e timeouts são reenviados com espera crescente, por até oito tentativas. Use oid do evento ou X-Master-Delivery para deduplicar. Antes de liberar bens ou serviços, confirme que data.status é paid para uma cobrança e que a operação pertence à sua conta.
Você pode girar o segredo no painel. O segredo antigo deixa de assinar tentativas futuras; atualize sua aplicação ao girar.