Create new loans from application through disbursement, including borrower setup, term configuration, and approval workflows.
Gather the following before creating a new loan. Missing any of these items will block the origination process.
loan_number -- Unique identifier (e.g., LN-2026-0042)borrower_name / borrower_id -- Select from CRM entitiesprincipal_amount -- Loan amount in dollarsinterest_rate -- Annual rate as a decimal (e.g., 5.25)term_months -- Loan duration in monthspayment_frequency -- MONTHLY, QUARTERLY, SEMI_ANNUAL, ANNUAL, INTEREST_ONLY, or BALLOONorigination_date -- Date the loan is bookedfirst_payment_date -- When the first payment is duematurity_date -- Final payoff datePENDING. Change to ACTIVE once disbursement is confirmed.POST /api/v1/loans and returns the new loan record with its UUID.Important: Loans with a principal amount of $50,000 or more automatically trigger the maker-checker approval workflow. The API returns HTTP 202 with an approval_id instead of creating the loan immediately. A second authorized user must approve the request in the Approvals queue before the loan is created.
CEF Core supports three primary loan structures. Select the appropriate type during origination to configure the correct amortization and draw behavior.
The most common loan type for church building projects and capital improvements. A fixed principal disbursed at closing with regular payments over the term.
Revolving credit facility that allows the borrower to draw funds up to the approved limit, repay, and re-draw.
Draw-based loan for new construction or major renovation projects. Funds are released in stages tied to inspection milestones.
POST /loans/:id/convert to convert to permanent financingEach loan must be configured as either fixed-rate or variable-rate at origination. Rate type affects how interest is calculated on the amortization schedule.
The interest rate remains constant for the life of the loan.
interest_rate to the annual rateThe rate adjusts periodically based on a reference index plus a margin.
rate_index: SOFR, PRIME, or TREASURYrate_margin: spread above index (e.g., 2.50)rate_floor / rate_ceiling: min/max boundsLoan origination uses the following endpoints. All requests require authentication via JWT bearer token.
| Method | Endpoint | Description |
|---|---|---|
POST | /api/v1/loans | Create a new loan |
GET | /api/v1/loans | List loans (paginated, filterable by status/borrower) |
GET | /api/v1/loans/:id | Get a single loan by UUID |
Pro Tip: When calling the API from the frontend, always use the authFetch helper from @/lib/auth-fetch. It handles JWT authentication, token refresh, and error handling automatically.
CEF Core enforces the four-eyes principle for high-value transactions. Any loan with a principal amount of $50,000 or more requires a second user to approve the origination.
HTTP 202 Accepted with an approval_id.Note: The same user who submitted the loan cannot approve it. The checker must be a different user with ADMIN or TREASURY role.
After originating a loan, learn how to record payments, generate amortization schedules, and configure late fee rules.
Payment Processing Guide