Skip to content

13.9 Disbursement

Move money from the lender to the borrower (or to vendors on the borrower’s instruction) reliably and reconcileably, with every pre-condition checked and every regulator-required disclosure captured.

Disbursement is the single highest-stakes flow in operations — getting it wrong means real money moving incorrectly. The platform must enforce idempotency (no double-payouts), strict checklist gating, and clean reconciliation against the sponsor bank.

  1. As an ops user, I want a single screen with every pre-disbursement check status (KYC, sanction validity, KFS acknowledged, mandate active, etc.) for fast review and execution.
  2. As a maker, I want to create a disbursement instruction; as a checker, I want to approve before execution per the delegated authority matrix.
  3. As a borrower, I want UTR confirmation within minutes of disbursement via SMS + WhatsApp + email.
  4. As a co-lender, I want my share to flow into the co-lending escrow on time and be combined cleanly with the originator’s share before payout.
  5. As a borrower, I want to pay my vendor / supplier directly on disbursement (with explicit consent) without funds passing through me.
  6. As an ops user, I want returned-funds (beneficiary bank rejected) to automatically reverse the loan booking and trigger a re-attempt or close workflow.
  7. As an admin, I want to swap payout vendor (sponsor bank API ↔ RazorpayX ↔ Cashfree) via routing config without code change.
  8. As a finance officer, I want daily reconciliation between sponsor-bank statement and platform’s expected payouts, with exceptions queued.
  9. As a system, I want idempotency-keyed payout calls so a network failure / retry doesn’t cause double-payout.
  10. As a CTO, I want a circuit breaker on payout rail vendors so a slow vendor doesn’t block all disbursements.
  11. As a compliance officer, I want every disbursement audited with pre-disbursement checklist evidence and post-disbursement notifications.
  12. As an analyst, I want to see the disbursement TAT distribution by channel / product / time-of-day for SLA tracking.
  13. As an ops user handling a stuck payout, I want clear ageing visibility and one-click escalation to sponsor bank’s API support.
  14. As a borrower whose bank account fails KYC name-match at penny drop, I want a clear path to update the account and re-attempt.
  15. As a borrower with split disbursement (own account + vendor account), I want both legs visible with separate UTRs.
  • POST /v1/disbursements — create instruction. Body: { sanction_id, amount, to_account_token, to_ifsc, purpose, splits[]? }. Returns { disbursement_id, status: "pending_approval" }.
  • POST /v1/disbursements/{id}/approve — maker-checker approval. Body: { approver_id, notes? }.
  • POST /v1/disbursements/{id}/execute — fire to payout rail. Returns { status: "executing" }.
  • POST /v1/disbursements/{id}/cancel — cancel before execution.
  • GET /v1/disbursements/{id}/status{ status, utr?, attempted_at, settled_at }.
  • GET /v1/disbursements/{id}/checklist — current checklist status per pre-condition.
  • POST /v1/disbursements/{id}/checklist/override — manual override with deviation reason.
  • POST /v1/escrow/co-lending/fund — request partner funds release.
  • GET /v1/escrow/co-lending/balance — current escrow balance per partner / pool.
  • POST /v1/escrow/co-lending/disburse — combined disbursement from escrow.
  • POST /v1/disbursements/{id}/splits — define split legs. Body: { legs: [{ to_account, amount, beneficiary_type }] }.
  • GET /v1/disbursements/{id}/legs/{leg_id} — per-leg status.
  • GET /v1/reconciliation/disbursement/{date} — daily recon report.
  • GET /v1/reconciliation/disbursement/exceptions — unmatched queue.
  • POST /v1/reconciliation/disbursement/exceptions/{id}/resolve — ops resolution.
  • POST /v1/disbursements/{id}/returned — capture returned-funds event. Body: { returned_amount, bank_ref, reason_code }.
  • POST /v1/disbursements/{id}/reattempt — re-attempt after issue resolved.
  • GET /v1/admin/vendor-routing/payout.
  • POST /v1/admin/vendor-routing/payout.
  • disbursement_instruction, payout_attempt, utr, escrow_movement, disbursement_leg, reconciliation_exception, returned_funds_event.
  • Pending-approval queue with per-disbursement checklist status.
  • Approval screen with full sanction + borrower context + KFS link.
  • Execute screen with final confirmation + idempotency-key generation.
  • Stuck-payout queue with ageing.
  • Daily reconciliation dashboard with exception triage.
  • Status tracker during disbursement (initiated → processing → completed with UTR).
  • Notification with UTR + amount + account masked.
  • Vendor routing config.
  • Payout-rail performance dashboard.
  • Returned-funds analysis.
  • Disbursement service — orchestration, checklist enforcement, idempotency.
  • Payout adapter with vendor routing, circuit breaker, retry.
  • Escrow management — co-lending escrow + own collection / payout accounts.
  • Reconciliation service — daily recon of sponsor-bank statement vs platform expected.
  • Returned-funds handler — reverse loan booking, trigger remediation.
  • Sponsor bank payout API — primary rail.
  • RazorpayX Payouts — secondary / aggregator.
  • Cashfree Payouts — alternative.
  • Setu Bridge — for some sponsor banks.
  • Penny-drop service for last-mile bank account verification.
  • Pre-disbursement checklist passes → instruction created → approved → executed → UTR captured → loan activated.
  • Co-lending disbursement: partner funds into escrow → originator funds → combined payout → single UTR.
  • Split disbursement: multi-leg payout; each leg gets own UTR.
  • Borrower notification within 2 minutes of UTR capture.
  • Sponsor-bank API timeout → idempotency prevents double-payout on retry.
  • Beneficiary bank rejects (account closed / frozen) → funds returned → loan booking reversed.
  • Co-lender’s funds not yet in escrow at execution time → disbursement queued.
  • NACH not active when checklist runs → block.
  • Sanction validity expired between approval and execution → re-sanction or extend.
  • Cooling-off opted-in but not yet elapsed → wait.
  • Approver lacks delegation for amount → escalate.
  • Sponsor-bank statement matches every executed payout.
  • Mismatched amount → exception queue with diff.
  • Extra credit in account (returned funds without notification) → flag for ops.
  • Missing payout (system shows executed, bank shows none) → urgent escalation.
  • Borrower changes bank account between sanction and execution → re-do penny drop + NACH; defer execution.
  • Vendor in split disbursement has invalid IFSC → entire split fails; partial-success policy decision.
  • Co-lender’s funds released into escrow but pulled back due to operational issue → reconcile and re-fund.
  • Daily payout volume exceeds sponsor-bank cap → split batches; alternate vendor.
  • RTGS cut-off time approaches → mode auto-downgrades to IMPS / NEFT.
  • Bank holiday → disbursement queued for next working day per policy.
  • Foreign-bank beneficiary (NRE / NRO) — additional FEMA-related checks for transfers above thresholds.
  • Borrower in cooling-off period exercises exit — recover principal, refund proportionate fees.
  • Disbursement latency from sanction to UTR < 2 hours median; < 6 hours p95.
  • Pre-disbursement checklist enforced as hard gate (no bypass without explicit deviation).
  • Idempotency on every payout call (verified via chaos test of duplicate API submissions).
  • Daily reconciliation exception rate < 0.5%.
  • Returned-funds workflow tested end-to-end with bank simulation.
  • Co-lending escrow flow tested with at least one partner.
  • Vendor failover tested with chaos drill.
  • All disbursements audited with checklist evidence and UTR capture.
  • Digital Lending Guidelines — direct flow lender → borrower; vendor payout requires explicit consent.
  • KYC MD — KYC valid at disbursement.
  • Co-Lending Guidelines — escrow discipline.
  • IT MD — secure communication with sponsor bank; idempotency.
  • DPDP — borrower notification.