processing, success, failed).
Use webhooks as your primary asynchronous disbursement update channel.
Payload Fields
| Field | Description |
|---|---|
event | Event type (for example disbursement.status) |
clientId | Your Payfonte client ID |
data.status | disbursement status (processing, success, failed) |
data.statusDescription | Provider/platform status detail |
data.reference | Payfonte disbursement reference |
data.externalReference | Merchant-provided reference |
data.providersReference | Provider reference |
data.amount | disbursement amount in minor units |
data.charge | Applied disbursement charge |
data.provider | Provider slug used |
data.transferRecipientId | Recipient identifier |
data.transferRecipientLabel | Human-readable recipient label |
deliveryId | Webhook delivery identifier |
disbursement.status
Signature Verification
Validate webhook authenticity before processing.- Header:
x-webhook-signature - Algorithm:
sha512HMAC of request body using yourclient-secret
Safe Processing Pattern
Check idempotency
Deduplicate by
reference + status (or deliveryId) before applying business actions.Update internal ledger/state
Mark disbursement as final only for terminal statuses and save
statusDescription.Common Issues
| Issue | Likely Cause | Fix |
|---|---|---|
| Duplicate webhook processing | No idempotency handling | Store processed reference/status and skip repeats |
| Signature mismatch | Wrong secret or mutated payload | Use correct client-secret and hash exact request body |
| Missed status updates | Timeout/non-200 responses | Return 200 quickly; move heavy logic to async worker |
| Conflicting disbursement state | Out-of-order processing | Always compare current state before applying updates |
Related Docs
Disbursements Overview
End-to-end disbursement flow and endpoints.
Disbursement Examples
Request/response payload samples.
Authorization Mode
PIN vs Authorization URL configuration.