Loan Onboarding
Transfer approved loans from LOS to LMS using a single API call. Complete loan setup including borrower, business, bank details, and payment schedule.
Loan Onboarding
Seamless LOS to LMS TransitionOnce a loan application is approved in the Loan Origination System (LOS), you can onboard it to the Loan Management System (LMS) using a single API call. This process transfers all application data, sets up the loan account, and prepares it for funding.
The loan onboarding process bridges the gap between loan origination and loan servicing, enabling seamless transfer of approved applications from LOS to LMS for ongoing management.
Onboarding Overview
When a loan application is approved in LOS, it's ready to be onboarded to LMS. The onboarding process:
- Transfers complete application data - Borrower, business, loan terms, and bank account information
- Creates loan account - Sets up the loan in LMS with unique loan number
- Generates payment schedule - Creates payment schedule based on loan terms
- Prepares for funding - Loan status set to "Unfunded" until funding is processed
LOS to LMS Flow
%%{init: {'theme': 'base', 'themeVariables': {'background': '#ffffff', 'mainBkg': '#ffffff', 'clusterBkg': '#ffffff', 'clusterBorder': '#2563eb', 'titleColor': '#000000', 'primaryColor': '#2563eb', 'primaryTextColor': '#ffffff', 'lineColor': '#374151'}, 'flowchart': {'padding': 20, 'nodeSpacing': 25, 'rankSpacing': 35}}}%%
flowchart LR
subgraph MainContainer[🔄 Loan Onboarding Flow]
direction LR
A[✅ Approved] --> B[🔄 Board API] --> C[🏦 Created] --> D[📅 Schedule] --> E[💵 Fund]
style A fill:#059669,stroke:#047857,color:#fff
style B fill:#d97706,stroke:#b45309,color:#fff
style C fill:#059669,stroke:#047857,color:#fff
style D fill:#2563eb,stroke:#1e40af,color:#fff
style E fill:#2563eb,stroke:#1e40af,color:#fff
end
Flow Steps:
- Approved - Loan application approved in LOS
- Board API - Single API call to onboard loan
- Created - Loan account created in LMS
- Schedule - Payment schedule generated
- Fund - Loan ready for funding
Board Approved Loan API
The Board Approved Loan API is a single endpoint that transfers all application data from LOS to LMS and creates a complete loan setup.
Endpoint
POST /v1/lms-application-processor/application/submit/business/onboard
Request Structure
The API accepts a comprehensive payload that includes:
| Section | Description | Required |
|---|---|---|
| Loan Details | Product, amount, rate, term | Yes |
| Borrower Information | Name, SSN, contact details | Yes |
| Business Information | Business name, EIN, address | Conditional |
| Bank Account | Account and routing numbers | Yes |
| Payment Schedule | First payment date, frequency | Yes |
Required Fields
Loan Details
| Field | Type | Required | Description |
|---|---|---|---|
AdditionalRefId | string | Yes | Application number from LOS (e.g., APP-2024-001234) |
LoanProductId | string | Yes | Product identifier (e.g., termloan, loc) |
ProductCategory | string | Yes | Business or Consumer |
ProductPortfolioType | string | Yes | Installment, Revolving, or MCA |
LoanAmount | number | Yes | Total loan amount |
InterestRate | number | Yes | Annual interest rate percentage |
Term | integer | Yes | Loan term in months |
LoanOnboardedDate | date | Yes | Date loan is onboarded |
Screenshots
Screenshot: Loan Information TabThis screenshot shows the Loan Information tab in LMS displaying detailed loan information including product, amount, rate, and term that correspond to the onboarding API payload.
Borrower Information
| Field | Type | Required | Description |
|---|---|---|---|
FirstName | string | Yes | Borrower first name |
LastName | string | Yes | Borrower last name |
Email | string | Yes | Email address |
Phone | string | Yes | Phone number |
SSN | string | Yes | Social Security Number (masked) |
Business Information (Business Loans)
| Field | Type | Required | Description |
|---|---|---|---|
BusinessName | string | Yes | Legal business name |
EIN | string | Yes | Employer Identification Number |
Address | object | Yes | Business address |
Bank Account Details
| Field | Type | Required | Description |
|---|---|---|---|
BankName | string | Yes | Bank name |
AccountNumber | string | Yes | Bank account number |
RoutingNumber | string | Yes | Bank routing number |
AccountType | string | Yes | Checking or Savings |
Payment Schedule
| Field | Type | Required | Description |
|---|---|---|---|
FirstPaymentDate | date | Yes | Date of first scheduled payment |
PaymentFrequency | string | Yes | Monthly, Biweekly, Weekly |
Complete Request Example
curl -X POST 'https://api.demo.lms.lendfoundry.com/v1/lms-application-processor/application/submit/business/onboard' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"AdditionalRefId": "APP-2024-001234",
"LoanProductId": "termloan",
"ProductCategory": "Business",
"ProductPortfolioType": "Installment",
"LoanAmount": 50000,
"InterestRate": 8.5,
"Term": 36,
"LoanOnboardedDate": "2024-01-15",
"Comments": "Approved loan from LOS",
"BusinessRequest": [
{
"BusinessName": "Acme Corp",
"EIN": "12-3456789",
"Address": {
"AddressLine1": "123 Main St",
"City": "New York",
"State": "NY",
"ZipCode": "10001"
}
}
],
"ApplicantRequest": [
{
"FirstName": "John",
"LastName": "Doe",
"Email": "[email protected]",
"Phone": "555-123-4567",
"SSN": "***-**-1234"
}
],
"BankDetails": {
"BankName": "Chase Bank",
"AccountNumber": "****1234",
"RoutingNumber": "021000021",
"AccountType": "Checking"
},
"LoanScheduleRequest": {
"FirstPaymentDate": "2024-02-15",
"PaymentFrequency": "Monthly"
}
}'const onboardLoan = async (applicationId, loanData) => {
const url = 'https://api.demo.lms.lendfoundry.com/v1/lms-application-processor/application/submit/business/onboard';
const payload = {
AdditionalRefId: applicationId,
LoanProductId: loanData.productId,
ProductCategory: loanData.category,
ProductPortfolioType: 'Installment',
LoanAmount: loanData.amount,
InterestRate: loanData.rate,
Term: loanData.term,
LoanOnboardedDate: loanData.onboardDate,
Comments: 'Approved loan from LOS',
BusinessRequest: loanData.business ? [{
BusinessName: loanData.business.name,
EIN: loanData.business.ein,
Address: {
AddressLine1: loanData.business.address.line1,
City: loanData.business.address.city,
State: loanData.business.address.state,
ZipCode: loanData.business.address.zipCode
}
}] : [],
ApplicantRequest: [{
FirstName: loanData.borrower.firstName,
LastName: loanData.borrower.lastName,
Email: loanData.borrower.email,
Phone: loanData.borrower.phone,
SSN: loanData.borrower.ssn
}],
BankDetails: {
BankName: loanData.bank.name,
AccountNumber: loanData.bank.accountNumber,
RoutingNumber: loanData.bank.routingNumber,
AccountType: loanData.bank.accountType
},
LoanScheduleRequest: {
FirstPaymentDate: loanData.firstPaymentDate,
PaymentFrequency: loanData.frequency
}
};
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
};
// Usage
const loanData = {
productId: 'termloan',
category: 'Business',
amount: 50000,
rate: 8.5,
term: 36,
onboardDate: '2024-01-15',
firstPaymentDate: '2024-02-15',
frequency: 'Monthly',
business: {
name: 'Acme Corp',
ein: '12-3456789',
address: {
line1: '123 Main St',
city: 'New York',
state: 'NY',
zipCode: '10001'
}
},
borrower: {
firstName: 'John',
lastName: 'Doe',
email: '[email protected]',
phone: '555-123-4567',
ssn: '***-**-1234'
},
bank: {
name: 'Chase Bank',
accountNumber: '****1234',
routingNumber: '021000021',
accountType: 'Checking'
}
};
const result = await onboardLoan('APP-2024-001234', loanData);
console.log(`Loan created: ${result.loanId}`);import requests
def onboard_loan(application_id, loan_data):
url = "https://api.demo.lms.lendfoundry.com/v1/lms-application-processor/application/submit/business/onboard"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
payload = {
"AdditionalRefId": application_id,
"LoanProductId": loan_data["product_id"],
"ProductCategory": loan_data["category"],
"ProductPortfolioType": "Installment",
"LoanAmount": loan_data["amount"],
"InterestRate": loan_data["rate"],
"Term": loan_data["term"],
"LoanOnboardedDate": loan_data["onboard_date"],
"Comments": "Approved loan from LOS",
"BusinessRequest": loan_data.get("business", []),
"ApplicantRequest": loan_data.get("applicants", []),
"BankDetails": loan_data["bank_details"],
"LoanScheduleRequest": {
"FirstPaymentDate": loan_data["first_payment_date"],
"PaymentFrequency": loan_data["frequency"]
}
}
response = requests.post(url, json=payload, headers=headers)
response.raise_for_status()
return response.json()
# Usage
loan_data = {
"product_id": "termloan",
"category": "Business",
"amount": 50000,
"rate": 8.5,
"term": 36,
"onboard_date": "2024-01-15",
"first_payment_date": "2024-02-15",
"frequency": "Monthly",
"bank_details": {
"BankName": "Chase Bank",
"AccountNumber": "****1234",
"RoutingNumber": "021000021",
"AccountType": "Checking"
},
"business": [{
"BusinessName": "Acme Corp",
"EIN": "12-3456789",
"Address": {
"AddressLine1": "123 Main St",
"City": "New York",
"State": "NY",
"ZipCode": "10001"
}
}],
"applicants": [{
"FirstName": "John",
"LastName": "Doe",
"Email": "[email protected]",
"Phone": "555-123-4567",
"SSN": "***-**-1234"
}]
}
result = onboard_loan("APP-2024-001234", loan_data)
print(f"Loan created: {result['loanId']}")import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
import com.fasterxml.jackson.databind.ObjectMapper;
public class LoanOnboarding {
private static final String BASE_URL = "https://api.demo.lms.lendfoundry.com/v1";
private static final HttpClient client = HttpClient.newHttpClient();
private static final ObjectMapper mapper = new ObjectMapper();
public static String onboardLoan(String applicationId, LoanData loanData) throws Exception {
String url = BASE_URL + "/lms-application-processor/application/submit/business/onboard";
Map<String, Object> payload = new HashMap<>();
payload.put("AdditionalRefId", applicationId);
payload.put("LoanProductId", loanData.getProductId());
payload.put("ProductCategory", loanData.getCategory());
payload.put("ProductPortfolioType", "Installment");
payload.put("LoanAmount", loanData.getAmount());
payload.put("InterestRate", loanData.getRate());
payload.put("Term", loanData.getTerm());
payload.put("LoanOnboardedDate", loanData.getOnboardDate());
payload.put("Comments", "Approved loan from LOS");
payload.put("BusinessRequest", loanData.getBusiness());
payload.put("ApplicantRequest", loanData.getApplicants());
payload.put("BankDetails", loanData.getBankDetails());
Map<String, Object> scheduleRequest = new HashMap<>();
scheduleRequest.put("FirstPaymentDate", loanData.getFirstPaymentDate());
scheduleRequest.put("PaymentFrequency", loanData.getFrequency());
payload.put("LoanScheduleRequest", scheduleRequest);
String requestBody = mapper.writeValueAsString(payload);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer YOUR_TOKEN")
.header("Content-Type", "application/json")
.POST(BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
return response.body();
}
}Response Example
{
"loanId": "LN-2024-001234",
"applicationNumber": "APP-2024-001234",
"status": "Unfunded",
"borrowerName": "John Doe",
"businessName": "Acme Corp",
"loanAmount": 50000.00,
"interestRate": 8.5,
"term": 36,
"createdDate": "2024-01-15T10:30:00Z",
"schedule": {
"firstPaymentDate": "2024-02-15",
"frequency": "Monthly",
"paymentAmount": 1578.32,
"totalPayments": 36
}
}Loan Products Supported
LendFoundry supports multiple loan product types for onboarding:
%%{init: {'theme': 'base', 'themeVariables': {'background': '#ffffff', 'mainBkg': '#ffffff', 'clusterBkg': '#ffffff', 'clusterBorder': '#6b7280', 'titleColor': '#000000', 'primaryColor': '#2563eb', 'primaryTextColor': '#ffffff', 'lineColor': '#374151'}, 'flowchart': {'padding': 15, 'nodeSpacing': 25, 'rankSpacing': 30}}}%%
flowchart LR
subgraph MainContainer[📦 Supported Loan Products]
direction LR
A[🏠 Term] --- B[💳 LOC] --- C[💼 MCA] --- D[🔗 SCF]
style A fill:#2563eb,stroke:#1e40af,color:#fff
style B fill:#2563eb,stroke:#1e40af,color:#fff
style C fill:#2563eb,stroke:#1e40af,color:#fff
style D fill:#2563eb,stroke:#1e40af,color:#fff
end
| Product Type | Description | Portfolio Type |
|---|---|---|
| Term Loans | Fixed-term installment loans | Installment |
| Line of Credit | Revolving credit facility | Revolving |
| Merchant Cash Advance | Business cash advance | MCA |
| Supply Chain Financing | Supply chain financing | Installment or Revolving |
Post-Onboarding Status
After successful onboarding, the loan enters the LMS system with specific status and setup:
Loan Status
| Status | Description | Next Action |
|---|---|---|
| Created | Loan account created | Ready for funding |
| Unfunded | Loan created but not yet funded | Process funding |
Generated Schedule
The system automatically generates a payment schedule based on:
- Loan amount and interest rate
- Loan term (number of payments)
- First payment date
- Payment frequency
Funding Process
Once onboarded, the loan is ready for funding:
- Review loan details - Verify all information is correct
- Process funding - Disburse funds to borrower's bank account
- Loan becomes active - Status changes to "Funded" or "Active"
Retrieving Onboarded Loan
After onboarding, you can retrieve the loan using several methods:
Get Loan by Application Number
curl -X GET 'https://api.demo.lms.lendfoundry.com/v1/lms-application-processor/application/APP-2024-001234' \
-H 'Authorization: Bearer YOUR_TOKEN'const getLoanByApplication = async (applicationNumber) => {
const url = `https://api.demo.lms.lendfoundry.com/v1/lms-application-processor/application/${applicationNumber}`;
const response = await fetch(url, {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json'
}
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
};
const loan = await getLoanByApplication('APP-2024-001234');
console.log(loan);import requests
def get_loan_by_application(application_number):
url = f"https://api.demo.lms.lendfoundry.com/v1/lms-application-processor/application/{application_number}"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()
loan = get_loan_by_application("APP-2024-001234")
print(loan)public static String getLoanByApplication(String applicationNumber) throws Exception {
String url = BASE_URL + "/lms-application-processor/application/" + applicationNumber;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer YOUR_TOKEN")
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
return response.body();
}Get Related Applications
Retrieve all applications related to a loan:
curl -X GET 'https://api.demo.lms.lendfoundry.com/v1/lms-application-processor/application/LN-2024-001234/all/related' \
-H 'Authorization: Bearer YOUR_TOKEN'const getRelatedApplications = async (loanNumber) => {
const url = `https://api.demo.lms.lendfoundry.com/v1/lms-application-processor/application/${loanNumber}/all/related`;
const response = await fetch(url, {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'Content-Type': 'application/json'
}
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
};
const relatedApps = await getRelatedApplications('LN-2024-001234');
console.log(relatedApps);import requests
def get_related_applications(loan_number):
url = f"https://api.demo.lms.lendfoundry.com/v1/lms-application-processor/application/{loan_number}/all/related"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()
related_apps = get_related_applications("LN-2024-001234")
print(related_apps)public static String getRelatedApplications(String loanNumber) throws Exception {
String url = BASE_URL + "/lms-application-processor/application/" + loanNumber + "/all/related";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer YOUR_TOKEN")
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
return response.body();
}Screenshots
Screenshot: Onboarded Loan in LMSThis screenshot shows an onboarded loan in the Loan Management System with loan details, status, and payment schedule information.
Next Steps
| Resource | Description |
|---|---|
| Payment Processing | Learn how to process payments for onboarded loans |
| Line of Credit Operations | Understand LOC operations and draw management |
| API Reference | Full API documentation |
Ready to Process Payments?Once your loan is onboarded and funded, head to the Payment Processing Guide to learn how to handle payments.
Updated 3 months ago
