Skip to main content
POST
Record a repayment
Records a standard repayment against an active loan. The amount is allocated to interest then principal according to the loan’s processing rules. Two equivalent forms — prefer the externalId form for partner integrations.

Path parameters

string
required
The loan’s externalId. On the /v1/loans/{loan_id}/repayments form, this is the numeric LMS id instead.

Request body

number
required
Must be greater than 0.
string
Optional value date of the payment, in ISO yyyy-MM-dd. Books the repayment as of the day the money actually moved on your side rather than the day you call this API — the reconciliation case where a wallet debit succeeds but settling with us is delayed. Defaults to the current date when omitted. Must be on or after the loan’s disbursement date and not in the future.
string
Optional exact instant the money moved on your side, RFC3339 (e.g. 2026-08-15T13:15:00+03:00). Also fixes transactionDate (which must agree if both are sent). Recommended on every settlement so the loan’s overdue position reflects when the customer actually paid.
string
Optional dedupe token — typically your wallet transaction reference for this payment (max 100 characters). If a repayment carrying this key has already been recorded on the loan, the original transaction is returned unchanged — the retry does not double-post. Strongly recommended on every repayment so timeouts and retries are safe to replay. Use a value unique per payment.

Examples

Response

200 OK returns the repayment object showing how the amount was allocated, plus the loan’s post-repayment position so you can decide what to do next without follow-up reads.
string
The loan’s status after this payment — Active, Closed (obligations met), or Overpaid.
number
What is still owed on this loan after the payment. 0 means the loan is settled.
number
Remaining borrowing headroom now, across all the customer’s loans — the same figure as the credit scorecard: finalCreditLimit - totalOutstanding, floored at 0. Every repayment frees up headroom immediately. If the scoring service cannot be reached, the field is omitted — fall back to the scorecard endpoint.
The position fields appear only on this POST response. Ledger reads (list, get-one, and the repaymentHistory embedded in the loan detail) return pure transaction objects.

Errors