Skip to main content
GET
List loans
Returns a page of loans. See Pagination for the common query parameter contract.

Query parameters

integer
default:"1"
integer
default:"10"
string
Common values: id, principal, expectedDisbursementDate.
string
ASC or DESC.
integer
Restrict the result to loans belonging to a specific customer (by internal LMS id). Mutually exclusive with customerExternalId — pass one or the other, not both.
string
Restrict the result to loans belonging to the customer with this partner-supplied externalId. Mutually exclusive with customerId. Named explicitly because loans have their own externalId field too — this one filters by the customer’s externalId, not the loan’s.
string
Case-insensitive exact match against the loan’s status. Accepted values are the exact strings the LMS returns: Active, Submitted and pending approval, Approved, Withdrawn by applicant, Rejected, Closed (obligations met), Closed (written off), Overpaid. The filter is applied wrapper-side after fetching, so total reflects the filtered count, not the unfiltered scope. Scans up to 1000 loans per call.

Examples

Response

Each row has the same shape as a single-loan read — balance roll-up, next-due summary, and the full repaymentSchedule — so partners can render outstanding-balance / next-instalment / schedule views without a per-loan detail call.
See the loan object for the full field reference.
repaymentSchedule on list rows is best-effort: each row is hydrated with a per-loan read behind the scenes, and if that read fails transiently the row is returned without the schedule rather than failing your whole page. nextDueDate / nextDueAmount are still present in that case. Treat a missing schedule on a list row as “retry or fetch the single loan”, not as “this loan has no schedule” — GET /v1/loans/{id} always carries it.