Line of Credit Operations
Complete guide to Line of Credit (LOC) operations including draw initiation, approval/rejection workflows, and LOC status management.
Line of Credit Operations
Revolving Credit ManagementLine of Credit (LOC) products provide flexible access to funds with draw initiation, approval workflows, and comprehensive status management capabilities.
Line of Credit operations enable borrowers to access funds as needed up to their credit limit, with each draw requiring initiation and approval before funding.
LOC Overview
A Line of Credit is a flexible lending product that provides borrowers with access to funds up to a predetermined credit limit.
LOC vs Term Loan
| Feature | Line of Credit | Term Loan |
|---|---|---|
| Fund Access | Draw as needed | Full amount at funding |
| Repayment | Revolving or fixed | Fixed installments |
| Interest | On drawn amount only | On full loan amount |
| Reusability | Credit replenishes (if revolving) | One-time use |
LOC Types
| Type | Description | Reusable Credit |
|---|---|---|
| Revolving | Credit replenishes as paid | Yes |
| Non-Revolving | One-time credit line | No |
| Fixed Term | Set end date | Varies |
| Open Term | No fixed end date | Varies |
LOC Status Flow
Line of Credit accounts can transition through different statuses:
%%{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[💳 LOC Status Flow]
direction LR
A[✅ Active] --> B[⏸️ Suspended]
A --> C[❌ Cancelled]
B --> D[✅ Active]
B --> E[🔒 Closed]
C --> E
style A fill:#059669,stroke:#047857,color:#fff
style B fill:#d97706,stroke:#b45309,color:#fff
style C fill:#dc2626,stroke:#b91c1c,color:#fff
style D fill:#059669,stroke:#047857,color:#fff
style E fill:#374151,stroke:#1f2937,color:#fff
end
| Status | Description | Allowed Actions |
|---|---|---|
| Active | Available for draws | Draw, Suspend, Cancel |
| Suspended | Temporarily disabled | Activate, Close |
| Closed | Fully paid and closed | None |
| Cancelled | Permanently cancelled | None |
Screenshots
Screenshot: LOC Status ManagementThis screenshot shows the Line of Credit status management interface in LMS displaying LOC account status, credit limit, available credit, and outstanding balance.
Draw Operations
Draw operations enable borrowers to access funds from their Line of Credit.
Draw Workflow
%%{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[📝 Draw Workflow]
direction LR
A[📝 Request] --> B{⚖️ Review} --> C[✅ Approve] --> D[💵 Fund]
B --> E[❌ Reject]
style A fill:#2563eb,stroke:#1e40af,color:#fff
style B fill:#6b7280,stroke:#4b5563,color:#fff
style C fill:#059669,stroke:#047857,color:#fff
style D fill:#059669,stroke:#047857,color:#fff
style E fill:#dc2626,stroke:#b91c1c,color:#fff
end
Workflow Steps:
- Request - Borrower initiates draw request
- Review - System or manual review of request
- Approve - Draw approved, funds prepared
- Reject - Draw rejected with reason
- Fund - Funds disbursed to borrower
Draw Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
requestDate | date | Yes | Date of draw request |
drawAmount | number | Yes | Requested draw amount |
purpose | string | No | Purpose of draw |
effectiveDate | date | Yes | When funds should be available |
notes | string | No | Additional notes |
Screenshots
Screenshot: LOC Draw Request FormThis screenshot shows the Line of Credit draw request form in LMS with fields for draw amount, effective date, purpose, and notes.
Initiate Draw Request
curl -X POST 'https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/LN-2024-001234/draws' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"requestDate": "2024-02-01",
"drawAmount": 5000.00,
"effectiveDate": "2024-02-03",
"purpose": "Working capital",
"notes": "Monthly draw for inventory"
}'const initiateDraw = async (loanNumber, amount, effectiveDate, purpose) => {
const url = `https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/${loanNumber}/draws`;
const payload = {
requestDate: new Date().toISOString().split('T')[0],
drawAmount: amount,
effectiveDate: effectiveDate,
purpose: purpose || 'Draw request',
notes: 'Monthly draw for inventory'
};
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();
};
const draw = await initiateDraw('LN-2024-001234', 5000.00, '2024-02-03', 'Working capital');
console.log(`Draw ID: ${draw.drawId}`);import requests
from datetime import date
def initiate_draw(loan_number, amount, effective_date, purpose=None):
url = f"https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/{loan_number}/draws"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
payload = {
"requestDate": date.today().isoformat(),
"drawAmount": amount,
"effectiveDate": effective_date,
"purpose": purpose or "Draw request",
"notes": "Monthly draw for inventory"
}
response = requests.post(url, json=payload, headers=headers)
response.raise_for_status()
return response.json()
draw = initiate_draw("LN-2024-001234", 5000.00, "2024-02-03", "Working capital")
print(f"Draw ID: {draw['drawId']}")public static String initiateDraw(String loanNumber, double amount, String effectiveDate, String purpose) throws Exception {
String url = BASE_URL + "/loan-management/loans/" + loanNumber + "/draws";
Map<String, Object> payload = new HashMap<>();
payload.put("requestDate", LocalDate.now().toString());
payload.put("drawAmount", amount);
payload.put("effectiveDate", effectiveDate);
payload.put("purpose", purpose != null ? purpose : "Draw request");
payload.put("notes", "Monthly draw for inventory");
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();
}Approve Draw
curl -X PUT 'https://api.demo.lms.lendfoundry.com/v1/loan-management/draws/DRW-2024-001234/approve' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"approvedAmount": 5000.00,
"autoFund": true,
"approvalNotes": "Draw approved for working capital"
}'const approveDraw = async (drawId, approvedAmount, autoFund, notes) => {
const url = `https://api.demo.lms.lendfoundry.com/v1/loan-management/draws/${drawId}/approve`;
const payload = {
approvedAmount: approvedAmount,
autoFund: autoFund,
approvalNotes: notes
};
const response = await fetch(url, {
method: 'PUT',
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();
};
const result = await approveDraw('DRW-2024-001234', 5000.00, true, 'Draw approved for working capital');
console.log(`Draw status: ${result.status}`);import requests
def approve_draw(draw_id, approved_amount, auto_fund, notes):
url = f"https://api.demo.lms.lendfoundry.com/v1/loan-management/draws/{draw_id}/approve"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
payload = {
"approvedAmount": approved_amount,
"autoFund": auto_fund,
"approvalNotes": notes
}
response = requests.put(url, json=payload, headers=headers)
response.raise_for_status()
return response.json()
result = approve_draw("DRW-2024-001234", 5000.00, True, "Draw approved for working capital")
print(f"Draw status: {result['status']}")public static String approveDraw(String drawId, double approvedAmount, boolean autoFund, String notes) throws Exception {
String url = BASE_URL + "/loan-management/draws/" + drawId + "/approve";
Map<String, Object> payload = new HashMap<>();
payload.put("approvedAmount", approvedAmount);
payload.put("autoFund", autoFund);
payload.put("approvalNotes", notes);
String requestBody = mapper.writeValueAsString(payload);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer YOUR_TOKEN")
.header("Content-Type", "application/json")
.PUT(BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
return response.body();
}Reject Draw
curl -X PUT 'https://api.demo.lms.lendfoundry.com/v1/loan-management/draws/DRW-2024-001234/reject' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"rejectionReason": "Exceeds available credit limit"
}'const rejectDraw = async (drawId, reason) => {
const url = `https://api.demo.lms.lendfoundry.com/v1/loan-management/draws/${drawId}/reject`;
const payload = {
rejectionReason: reason
};
const response = await fetch(url, {
method: 'PUT',
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();
};
await rejectDraw('DRW-2024-001234', 'Exceeds available credit limit');import requests
def reject_draw(draw_id, reason):
url = f"https://api.demo.lms.lendfoundry.com/v1/loan-management/draws/{draw_id}/reject"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
payload = {
"rejectionReason": reason
}
response = requests.put(url, json=payload, headers=headers)
response.raise_for_status()
return response.json()
reject_draw("DRW-2024-001234", "Exceeds available credit limit")public static String rejectDraw(String drawId, String reason) throws Exception {
String url = BASE_URL + "/loan-management/draws/" + drawId + "/reject";
Map<String, Object> payload = new HashMap<>();
payload.put("rejectionReason", reason);
String requestBody = mapper.writeValueAsString(payload);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer YOUR_TOKEN")
.header("Content-Type", "application/json")
.PUT(BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
return response.body();
}Draw Response Example
{
"drawId": "DRW-2024-001234",
"loanId": "LN-2024-001234",
"status": "Approved",
"requestDate": "2024-02-01",
"requestedAmount": 5000.00,
"approvedAmount": 5000.00,
"effectiveDate": "2024-02-03",
"fundedDate": "2024-02-03",
"purpose": "Working capital",
"creditLimit": 25000.00,
"availableCredit": 15000.00,
"outstandingBalance": 10000.00
}LOC Management
Line of Credit accounts can be managed through various status changes:
Suspend LOC
Temporarily disable a Line of Credit account:
curl -X PUT 'https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/LN-2024-001234/loc/suspend' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"reason": "Account review pending",
"effectiveDate": "2024-02-01"
}'const suspendLOC = async (loanNumber, reason, effectiveDate) => {
const url = `https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/${loanNumber}/loc/suspend`;
const payload = {
reason: reason,
effectiveDate: effectiveDate
};
const response = await fetch(url, {
method: 'PUT',
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();
};
await suspendLOC('LN-2024-001234', 'Account review pending', '2024-02-01');import requests
def suspend_loc(loan_number, reason, effective_date):
url = f"https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/{loan_number}/loc/suspend"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
payload = {
"reason": reason,
"effectiveDate": effective_date
}
response = requests.put(url, json=payload, headers=headers)
response.raise_for_status()
return response.json()
suspend_loc("LN-2024-001234", "Account review pending", "2024-02-01")public static String suspendLOC(String loanNumber, String reason, String effectiveDate) throws Exception {
String url = BASE_URL + "/loan-management/loans/" + loanNumber + "/loc/suspend";
Map<String, Object> payload = new HashMap<>();
payload.put("reason", reason);
payload.put("effectiveDate", effectiveDate);
String requestBody = mapper.writeValueAsString(payload);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer YOUR_TOKEN")
.header("Content-Type", "application/json")
.PUT(BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
return response.body();
}Activate LOC
Reactivate a suspended Line of Credit:
curl -X PUT 'https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/LN-2024-001234/loc/activate' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"effectiveDate": "2024-02-15"
}'const activateLOC = async (loanNumber, effectiveDate) => {
const url = `https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/${loanNumber}/loc/activate`;
const payload = {
effectiveDate: effectiveDate
};
const response = await fetch(url, {
method: 'PUT',
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();
};
await activateLOC('LN-2024-001234', '2024-02-15');import requests
def activate_loc(loan_number, effective_date):
url = f"https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/{loan_number}/loc/activate"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
payload = {
"effectiveDate": effective_date
}
response = requests.put(url, json=payload, headers=headers)
response.raise_for_status()
return response.json()
activate_loc("LN-2024-001234", "2024-02-15")public static String activateLOC(String loanNumber, String effectiveDate) throws Exception {
String url = BASE_URL + "/loan-management/loans/" + loanNumber + "/loc/activate";
Map<String, Object> payload = new HashMap<>();
payload.put("effectiveDate", effectiveDate);
String requestBody = mapper.writeValueAsString(payload);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer YOUR_TOKEN")
.header("Content-Type", "application/json")
.PUT(BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
return response.body();
}Cancel LOC
Permanently cancel a Line of Credit:
curl -X PUT 'https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/LN-2024-001234/loc/cancel' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"cancellationReason": "Customer request"
}'const cancelLOC = async (loanNumber, reason) => {
const url = `https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/${loanNumber}/loc/cancel`;
const payload = {
cancellationReason: reason
};
const response = await fetch(url, {
method: 'PUT',
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();
};
await cancelLOC('LN-2024-001234', 'Customer request');import requests
def cancel_loc(loan_number, reason):
url = f"https://api.demo.lms.lendfoundry.com/v1/loan-management/loans/{loan_number}/loc/cancel"
headers = {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
}
payload = {
"cancellationReason": reason
}
response = requests.put(url, json=payload, headers=headers)
response.raise_for_status()
return response.json()
cancel_loc("LN-2024-001234", "Customer request")public static String cancelLOC(String loanNumber, String reason) throws Exception {
String url = BASE_URL + "/loan-management/loans/" + loanNumber + "/loc/cancel";
Map<String, Object> payload = new HashMap<>();
payload.put("cancellationReason", reason);
String requestBody = mapper.writeValueAsString(payload);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer YOUR_TOKEN")
.header("Content-Type", "application/json")
.PUT(BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
return response.body();
}Next Steps
| Resource | Description |
|---|---|
| Loan Onboarding | Learn how to onboard loans from LOS |
| Payment Processing | Understand payment processing and auto-pay |
| API Reference | Full API documentation |
Complete LMS Process GuidesYou've now covered all major LMS process guides. Explore the API Reference for detailed endpoint documentation.
Updated about 1 month ago
