This is the outbound direction (API to you). The inbound webhooks the platform exposes to receive callbacks from the banking and KYC providers (for example
/webhooks/bank) are not part of your integration; you do not consume them.Register a destination
POST /api/v1/partners/me/webhook-config (partner API key or HMAC)
Register once the destination URL, the events you want, and any custom headers. Read it with GET and remove it with DELETE on the same path.
string
required
The single HTTPS destination that receives all of your notifications.
string[]
Subscription filter. Absent or empty receives all events. See the catalog below for valid values.
object
Extra HTTP headers sent on every delivery (for example an authorization token for your endpoint). The platform’s signature and event headers take precedence and are never overwritten.
Without a registered destination, events are only persisted, not sent.
Payload envelope
Every delivery shares a common envelope. The correlation id varies by event family:intentId (cash-out and cash-in), withdrawId (BRLP withdraw), or sessionId (KYC).
Event catalog
Cash-out (offramp), correlation key intentId
Cash-in (onramp), correlation key intentId
CASHIN_COMPLETED has two variants, discriminated by data.deliveryId:
- Without
deliveryId(legacy): crediting the crypto to the user’s wallet is your backend’s responsibility.data:correlationID, walletAddress, valueCents, transactionID, splitApplied, splitValueCents, completedAt. - With
deliveryId: the platform already delivered the crypto on-chain todata.destination, nothing to credit.data:correlationID, deliveryId, onChainTxId, asset, chain, tokenAmount, destination, completedAt.
BRLP withdraw (Mode B), correlation key withdrawId
KYC, correlation key sessionId
The KYC
data carries externalUserId, type ('PF' | 'PJ'), provider, status, previousStatus, documentMasked, rejectionReason?, completedAt?.
Signature verification
Every delivery is signed. Verify the signature before trusting the payload.webhookSecret (delivered at onboarding and rotatable via POST /api/v1/partners/me/rotate-webhook-secret). Compute the expected value and compare with a timing-safe equal.
The signature header prefix defaults to
App (X-App-Signature, X-App-Event); your instance’s exact prefix is confirmed at onboarding. Legacy partners without their own secret fall back to a global signing secret.Delivery guarantees
Retry
3 attempts, backoff 2s / 4s / 8s, 10s timeout per attempt. Failure after retries is only logged; it does not block the business flow.
Acknowledge
Respond
2xx. Any non-2xx or timeout counts as a failure and triggers a retry.Idempotency
Order is not guaranteed. Deduplicate by
intentId, correlationID, withdrawId, or sessionId.HTTPS only
Register an HTTPS destination only.