Addressing the loan
| Form | Path prefix | When to use |
|---|---|---|
| By loan externalId (recommended) | /v1/loans/external/{loan_external_id}/repayments/... | Use the externalId you supplied on loan create. |
| By LMS id | /v1/loans/{loan_id}/repayments/... | Use the numeric id from the create response. |
404 not_found if no loan matches.
The repayment object
The same object is returned by repay, get a transaction, the transaction list, and as each entry ofrepaymentHistory on the loan object.
Transaction type label — always
Repayment. The history is restricted
to customer repayments; disbursements, waivers, and accruals are
excluded.ISO-8601
YYYY-MM-DD. Value date the transaction was effective.Total transaction amount.
Portion applied to principal. Omitted if zero.
Portion applied to interest. Omitted if zero.
Portion applied to fees. Omitted if zero.
Portion applied to penalty charges. Omitted if zero.
Overpayment amount, present only when the transaction exceeded the
outstanding balance. A strong signal that something needs reconciling.
posted for a normal transaction, or reversed if it has been
reversed (an operational LMS-side action).Endpoints
| Method | Path | Purpose |
|---|---|---|
| POST | /v1/loans/external/{loan_external_id}/repayments | Repay by loan externalId (recommended) |
| POST | /v1/loans/{loan_id}/repayments | Repay by LMS id |
| GET | /v1/loans/external/{loan_external_id}/repayments | List repayments |
| GET | /v1/loans/external/{loan_external_id}/repayments/{transaction_id} | Get a transaction |
The repayment reads (list and get-one) are available in the
externalId form only. Posting a repayment still supports both the
externalId and numeric-id forms.
Repayment history: two ways to read it
The repayment history is available in two places, both returning the object above and both containing only customer repayments (newest first) — disbursements, waivers, and accruals are excluded:- Embedded snapshot — every single-loan read
(
GET /v1/loans/external/{loan_external_id}) includes arepaymentHistoryarray. Use this for a quick view without a second call. It is not included on the loan list endpoint, only on single-loan reads. - Paginated list —
GET /v1/loans/external/{loan_external_id}/repayments(reference) returns the same entries withpage/rowspagination, for loans with many partial payments.
Request body
POST /v1/loans/.../repayments takes:
Must be greater than 0.
Optional value date (ISO
yyyy-MM-dd). Defaults to today. See
Reconciling delayed settlements.Optional dedupe token — typically your wallet transaction reference
(max 100 characters). A repayment carrying a key already seen on the
loan returns the original transaction unchanged, so retries never
double-post. Strongly recommended on every repayment.
Reconciling delayed settlements
A common integration pattern is to debit the customer’s wallet first, then call this API to settle the loan. If that settle call fails, times out, or is only retried the next day, the payment still happened on your side — and your records are the source of truth for when. PasstransactionDate set to the date the wallet was actually debited.
The repayment is then booked as of that value date rather than the
day the API call lands. What that does:
- It records when the payment happened. Allocation and balances reflect the backdated date.
- On-time payments are not penalised for your delay. If the value
date is on/before the due date and the LMS had already raised a late
penalty while your call was in flight, the service automatically
cancels that penalty (waives and deactivates it) before posting the
repayment, then lets the overdue-penalty job recompute it against
whatever is genuinely still overdue:
- Paid in full on time → nothing remains overdue → no penalty at all (net zero).
- Partial on-time payment → the penalty is recomputed on the remaining overdue balance only. A 50,000 payment against a 100,000 principal leaves 61,000 overdue, so the penalty becomes 10% of 61,000 — not the original 100,000.
- Late payments still bear the penalty. If the value date is after the due date, the payment is genuinely late and the penalty stands (paid penalty → interest → principal).
The recomputed penalty appears at the next run of the overdue-penalty
job — the same nightly cycle that raises every penalty. So
immediately after an on-time partial payment the loan shows no penalty
and a reduced balance; the corrected penalty lands on the next cycle,
exactly as it would have with no delay.
The loan products use flat interest fixed at disbursement, so
the value date never changes the interest owed. The value date must
be on/after disbursement and not in the future.

