curl --request POST \
--url https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Idempotency: <x-idempotency>' \
--data '
{
"businessDate": "<string>",
"effectiveDate": "<string>",
"transactionId": "<string>",
"amount": "<string>",
"quoteId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments"
payload = {
"businessDate": "<string>",
"effectiveDate": "<string>",
"transactionId": "<string>",
"amount": "<string>",
"quoteId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"X-Idempotency": "<x-idempotency>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Idempotency': '<x-idempotency>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
businessDate: '<string>',
effectiveDate: '<string>',
transactionId: '<string>',
amount: '<string>',
quoteId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'businessDate' => '<string>',
'effectiveDate' => '<string>',
'transactionId' => '<string>',
'amount' => '<string>',
'quoteId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Idempotency: <x-idempotency>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments"
payload := strings.NewReader("{\n \"businessDate\": \"<string>\",\n \"effectiveDate\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"amount\": \"<string>\",\n \"quoteId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Idempotency", "<x-idempotency>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments")
.header("X-Idempotency", "<x-idempotency>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"businessDate\": \"<string>\",\n \"effectiveDate\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"amount\": \"<string>\",\n \"quoteId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Idempotency"] = '<x-idempotency>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"businessDate\": \"<string>\",\n \"effectiveDate\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"amount\": \"<string>\",\n \"quoteId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"previousScheduleVersionId": "<string>",
"scheduleVersion": {
"createdAt": "<string>",
"id": "<string>",
"installments": [
{
"dueDate": "<string>",
"feesAmount": "<string>",
"interestAmount": "<string>",
"number": 123,
"penaltiesAmount": "<string>",
"principalAmount": "<string>",
"principalRemaining": "<string>",
"totalAmount": "<string>"
}
],
"loanAccountId": "<string>",
"reason": "<string>",
"triggerTransactionId": "<string>",
"versionNumber": 123,
"predecessorVersionId": "<string>"
}
}{
"code": "<string>",
"detail": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "about:blank"
}Prepay loan account
Appends an immutable prepayment schedule version and recalculation trigger. Provide exactly one of amount or quoteId (or both, with amount equal to the quote’s net settlement amount). Idempotency is enforced by the lib-commons idempotency middleware via the X-Idempotency header; a reused key with different facts yields 409. A malformed UUID or amount yields 422.
curl --request POST \
--url https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Idempotency: <x-idempotency>' \
--data '
{
"businessDate": "<string>",
"effectiveDate": "<string>",
"transactionId": "<string>",
"amount": "<string>",
"quoteId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments"
payload = {
"businessDate": "<string>",
"effectiveDate": "<string>",
"transactionId": "<string>",
"amount": "<string>",
"quoteId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"X-Idempotency": "<x-idempotency>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Idempotency': '<x-idempotency>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
businessDate: '<string>',
effectiveDate: '<string>',
transactionId: '<string>',
amount: '<string>',
quoteId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'businessDate' => '<string>',
'effectiveDate' => '<string>',
'transactionId' => '<string>',
'amount' => '<string>',
'quoteId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Idempotency: <x-idempotency>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments"
payload := strings.NewReader("{\n \"businessDate\": \"<string>\",\n \"effectiveDate\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"amount\": \"<string>\",\n \"quoteId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Idempotency", "<x-idempotency>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments")
.header("X-Idempotency", "<x-idempotency>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"businessDate\": \"<string>\",\n \"effectiveDate\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"amount\": \"<string>\",\n \"quoteId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://lender.sandbox.lerian.net/api/v1/loan-accounts/{id}/prepayments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Idempotency"] = '<x-idempotency>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"businessDate\": \"<string>\",\n \"effectiveDate\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"amount\": \"<string>\",\n \"quoteId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"previousScheduleVersionId": "<string>",
"scheduleVersion": {
"createdAt": "<string>",
"id": "<string>",
"installments": [
{
"dueDate": "<string>",
"feesAmount": "<string>",
"interestAmount": "<string>",
"number": 123,
"penaltiesAmount": "<string>",
"principalAmount": "<string>",
"principalRemaining": "<string>",
"totalAmount": "<string>"
}
],
"loanAccountId": "<string>",
"reason": "<string>",
"triggerTransactionId": "<string>",
"versionNumber": 123,
"predecessorVersionId": "<string>"
}
}{
"code": "<string>",
"detail": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "about:blank"
}Authorizations
JWT bearer token issued by the identity provider.
Headers
Canonical idempotency request ID. Enforced by the lib-commons idempotency middleware.
"550e8400-e29b-41d4-a716-446655440011"
Path Parameters
Loan account identifier (UUID).
"550e8400-e29b-41d4-a716-446655440000"
Body
YYYY-MM-DD business date applied to the prepayment.
"2026-06-14"
YYYY-MM-DD effective date of the prepayment.
"2026-06-14"
Operator-supplied prepayment transaction identifier.
128Prepayment amount (2 d.p. string). Required when quoteId is empty.
"100.00"
Settlement quote identifier. Required when amount is empty.
"550e8400-e29b-41d4-a716-446655440020"
Was this page helpful?

