Mode A — your static QR / bank details
You provide (once, at onboarding)
- Your fixed UPI QR image and/or UPI ID
- Bank account details (name, account, IFSC) as a transfer fallback
You build
- Nothing
We provide
- The QR/bank block rendered in the partner app at the borrower's door
- Proof capture (screenshot), OCR extraction, duplicate-UTR detection
- Human verification before anything is booked
- The ledger record +
payment.collectedwebhook after verification
The flow
- Partner shows the borrower your QR / bank details in the app.
- Borrower pays — money lands in your account immediately.
- Partner submits the collection with a payment-proof screenshot; the case holds in a pending verification state. No webhook yet.
- Our operations team verifies the proof (OCR-extracted UTR/amount as advisory, duplicate-UTR checks across all cases).
- On verification: the ledger row is written and
payment.collectedfires — with the operator-confirmed amount (which may correct the partner's claim). A full clearance also firescase.closed.
Reconciling on your side
Match payment.collected events (amount + reference = UTR where extracted)
against your bank credits. Because verification is human-gated, treat the
webhook as the bookkeeping truth and your bank statement as the audit pair —
discrepancies are a support escalation, not a normal case.