Virtual Account Provisioning
Every escrow agreement gets its own unique Nomba Virtual Account. When you callvouch.escrow.create(), Vouch:
- Creates the agreement and milestone records in the database
- Calls the Nomba API to provision a virtual account tied to the agreement ID
- Returns the NUBAN and bank name in the response
Webhook-Driven Reconciliation
Once the buyer transfers funds, Nomba fires avirtual_account.funded event to Vouch. Vouch:
- Validates the HMAC-SHA256 signature on the raw request body
- Acknowledges the request immediately (
200) to prevent Nomba retries - Reconciles the payment asynchronously — matching the credited account number to the correct agreement
- Increments the
amountReceivedrunning total - Derives the new agreement status (
PARTIAL,FUNDED, orOVERFUNDED) - Emits an internal event to advance the escrow state machine
Partial Payment Support
Buyers can send funds in multiple transfers. Each bank transfer triggers a separatevirtual_account.funded event, and Vouch accumulates them:
Automatic Overpayment Refunds
If a buyer sends more than 1% above the agreed amount, Vouch automatically initiates a refund of the excess back to the sender’s bank account via the Nomba transfer API — no manual intervention required.Milestone Disbursement
When both buyer and seller confirm a milestone, Vouch calls the Nomba transfer API to send the milestone amount directly to the seller’s bank account. The seller provides their account number and bank code at confirmation time — Vouch does not store seller bank details before disbursement.RED, the agreement is frozen and disbursement is blocked.