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 Management

Line 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

FeatureLine of CreditTerm Loan
Fund AccessDraw as neededFull amount at funding
RepaymentRevolving or fixedFixed installments
InterestOn drawn amount onlyOn full loan amount
ReusabilityCredit replenishes (if revolving)One-time use

LOC Types

TypeDescriptionReusable Credit
RevolvingCredit replenishes as paidYes
Non-RevolvingOne-time credit lineNo
Fixed TermSet end dateVaries
Open TermNo fixed end dateVaries

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
StatusDescriptionAllowed Actions
ActiveAvailable for drawsDraw, Suspend, Cancel
SuspendedTemporarily disabledActivate, Close
ClosedFully paid and closedNone
CancelledPermanently cancelledNone

Screenshots

📷

Screenshot: LOC Status Management

This screenshot shows the Line of Credit status management interface in LMS displaying LOC account status, credit limit, available credit, and outstanding balance.

LOC Status Management

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

FieldTypeRequiredDescription
requestDatedateYesDate of draw request
drawAmountnumberYesRequested draw amount
purposestringNoPurpose of draw
effectiveDatedateYesWhen funds should be available
notesstringNoAdditional notes

Screenshots

📷

Screenshot: LOC Draw Request Form

This screenshot shows the Line of Credit draw request form in LMS with fields for draw amount, effective date, purpose, and notes.

LOC Draw Request Form

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

ResourceDescription
Loan OnboardingLearn how to onboard loans from LOS
Payment ProcessingUnderstand payment processing and auto-pay
API ReferenceFull API documentation

Complete LMS Process Guides

You've now covered all major LMS process guides. Explore the API Reference for detailed endpoint documentation.