/api/v1/portfolio/loans/{id}
One funded loan and its repayment schedule.
- Scope
portfolio:read- Rate limit
- 200 requests / min
- Idempotency
- read-only
Authentication
Send your key as Authorization: Bearer …. It must carry the scope portfolio:read; a key without it receives 403 forbidden.
Path parameters
idstringrequiredRequest body
This operation takes no request body.
Response
200application/jsonSerializedLoanDetailidstringrequiredcase_idstring | nullrequirednullableborrowerstringrequiredproductstringrequiredoriginal_amountnumberrequiredWhole dollars: the loan's original principal.
current_balancenumberrequiredWhole dollars: the loan's remaining balance, as servicing moves it.
interest_ratenumberrequiredA PERCENTAGE: 8.9 means 8.9 %. Same unit as /v1/portfolio.
term_monthsnumberrequiredmonthly_paymentnumberrequiredstatusstringrequirednext_payment_duestring | nullrequirednullableBusiness date, bare YYYY-MM-DD; null for a loan with nothing due.
payments_madenumberrequiredpayments_remainingnumberrequiredon_time_ratenumberrequiredPercentage of SETTLED installments (paid or partial) that were not late.
100 when nothing has settled yet — the service's existing semantic
(buildPaymentHistory), and deliberately not "unknown"/null here.
scheduleSerializedSchedulePayment[]requiredOldest first, as findByLoan orders it.
Errors
The statuses this operation can return, with the error.code values behind each. Every error body is the shared envelope described under Errors in Getting started.
401unauthorized403forbidden404not_found429rate_limit_exceeded500internal_error