Sync a single loan from LMS
curl --request POST \
--url https://api.finosu.com/webhooks/lms/sync/loan \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"loanId": "99001"
}
'import requests
url = "https://api.finosu.com/webhooks/lms/sync/loan"
payload = { "loanId": "99001" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({loanId: '99001'})
};
fetch('https://api.finosu.com/webhooks/lms/sync/loan', 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://api.finosu.com/webhooks/lms/sync/loan",
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([
'loanId' => '99001'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://api.finosu.com/webhooks/lms/sync/loan"
payload := strings.NewReader("{\n \"loanId\": \"99001\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://api.finosu.com/webhooks/lms/sync/loan")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"loanId\": \"99001\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/webhooks/lms/sync/loan")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"loanId\": \"99001\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"lmsType": "<string>",
"customerId": "<string>",
"finosuCustomerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"loansSynced": 123,
"loans": [
{
"finosuLoanId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"loanId": "<string>"
}
],
"error": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}LMS Sync
LMS Loan Sync
Sync a single loan and its associated customer from the company’s configured LMS. This is a loan-centric entry point for LMS platforms where customer lookups don’t reveal associated loans.
POST
/
webhooks
/
lms
/
sync
/
loan
Sync a single loan from LMS
curl --request POST \
--url https://api.finosu.com/webhooks/lms/sync/loan \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"loanId": "99001"
}
'import requests
url = "https://api.finosu.com/webhooks/lms/sync/loan"
payload = { "loanId": "99001" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({loanId: '99001'})
};
fetch('https://api.finosu.com/webhooks/lms/sync/loan', 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://api.finosu.com/webhooks/lms/sync/loan",
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([
'loanId' => '99001'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://api.finosu.com/webhooks/lms/sync/loan"
payload := strings.NewReader("{\n \"loanId\": \"99001\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://api.finosu.com/webhooks/lms/sync/loan")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"loanId\": \"99001\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.finosu.com/webhooks/lms/sync/loan")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"loanId\": \"99001\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"lmsType": "<string>",
"customerId": "<string>",
"finosuCustomerId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"loansSynced": 123,
"loans": [
{
"finosuLoanId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"loanId": "<string>"
}
],
"error": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Overview
This endpoint syncs a single loan and its associated customer from the company’s configured LMS. It is a loan-centric entry point for LMS platforms where customer lookups don’t reveal associated loans. The caller provides the external loan ID, and the endpoint discovers and syncs the customer automatically. This endpoint can be used:- Manually by client engineers for testing
- As a webhook target for automated syncs when the LMS detects loan updates
- Customer/contact information (discovered from the loan)
- The specified loan’s core data and balances
Request naming
Use camelCase request fields. Existing snake_case aliases are also accepted by the API.Retries and results
Idempotency-Key is logged for correlation only; it does not deduplicate requests or replay earlier results. A repeated request can run the sync again.
HTTP 200 means a sync result was returned. Inspect success, error, and each entry in loans before treating the operation as successful. Missing or invalid authentication returns 401; invalid request fields return 422.
Error responses
Invalid loan identifiers return422; a loan or associated customer confirmed missing from the LMS returns 404. Unexpected provider failures and malformed provider data return 500. Unsupported LMS operations retain 400.Headers
Body
application/json
Loan identifier to sync
Response
Sync result returned. Inspect success, error, and per-loan results.