Delivery format
Events arrive as a JSONPOST to your webhook URL:
token is an HS256-signed JWT whose payload is { event, data, iat, exp }, signed with your organization’s webhook secret. The outer event and data fields are unauthenticated convenience copies — always verify the token before trusting anything.
Verifying deliveries
UseresolvePviumWebhookPayload to verify the signed token in a webhook request body and return the verified event and data. If you have already extracted the token, pass it directly to verifyPviumWebhookToken. Each SDK provides both helpers.
Events
All payloads carryappId — your organization’s ID.
Payloads
batch.payee.added
batch.payee.added
The event can follow either invite acceptance or a direct addition to a batch. Your handler must accept both payload variants; for example, do not require invite details for a payee added directly.
batch.funded
batch.funded
Instant batches fire once, on the single payment transaction. Scheduled and pool batches fire on every funding transaction — watch
batch.fullyFunded for the transition into fully funded.batch.payee.claimed
batch.payee.claimed
Fires the first time a payment transitions from unclaimed to claimed — duplicate claim events are debounced.
oauth.invite.accepted
oauth.invite.accepted
Delivers the payee’s resolved identity plus the active authorization your organization was granted, including access and refresh tokens. This event is emitted when the authorization is active immediately. If payee screening is pending, handle
oauth.authorization.activated instead.contract.created
contract.created
payment.attached
payment.attached
Retries and idempotency
Pvium retries failed deliveries with increasing delays between attempts. Store an identifier for each processed event and skip duplicate deliveries. Use the following identifiers for each event type:batch.fundedandbatch.payee.claimed— thetransactionHashpayment.attached—paymentData.idoauth.invite.acceptedandoauth.authorization.activated—authorization.idbatch.payee.added—invite.idorauthorization.id
2xx and process asynchronously, and reconcile against payout records rather than relying on webhooks alone — records are the source of truth for settled payments.
