Skip to main content

Data contract

One row = one overdue loan. The same shape is used by the push API, the pull API, and (as columns) the CSV path. Unknown fields are ignored, never fatal.

Required

FieldTypeRules
sourceLoanNumberstring ≤64Your stable loan ID — the key for every later lookup, update, webhook, and payment. Unique within your book.
borrower.namestringFull name.
borrower.phonestringIndian mobile; +91 / 91 / leading-0 accepted, normalised to 10 digits.
borrower.address.pincodestring6-digit PIN. Drives partner matching — accuracy directly affects collection speed.
loan.outstandingAmountnumberTotal currently due (INR), > 0.
FieldWhy it matters
loan.dpd (number or "61-90" range)Sets priority, partner incentive, and visit type.
loan.emiAmount, loan.loanAmount, loan.disbursedAmountShown to the partner; better borrower conversations.
loan.nextDueDate, loan.disbursedDateDates: YYYY-MM-DD, DD-MM-YYYY, 28-Apr-26 all accepted.
loan.lateCharges, loan.interestRate, loan.tenure, loan.totalRepayable, loan.productNameDispute handling at the door.
borrower.address.line1/line2/city/state/landmarkBetter geocoding → faster visits.
borrower.email, borrower.language, borrower.employerNamePayment-link delivery & partner briefing.

The batch envelope (push API)

{
"fullSnapshot": false,
"rows": [ { "sourceLoanNumber": "LN-…", "borrower": {}, "loan": {} } ]
}
  • fullSnapshot: true asserts "this is my complete outstanding book" — any of your active cases absent from the batch get flagged for review (borrower may have paid you directly). Use it for daily/weekly reconciliation pushes; never for incremental ones.
  • Re-sending a row for an existing loan updates it (outstanding, contact, address). One active case per loan is enforced by us — duplicates are structurally impossible.

Validation failures come back per-row with the index, field, and reason — see errors.