Skip to main content
POST
/
v1
/
loans
Submit a loan application
curl --request POST \
  --url https://api-dev.bsa.ai/v1/loans \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "customerId": 123,
  "productId": 123,
  "principal": 123,
  "loanTermFrequency": 123,
  "loanTermFrequencyType": 123,
  "numberOfRepayments": 123,
  "repaymentEvery": 123,
  "repaymentFrequencyType": 123,
  "interestRatePerPeriod": 123,
  "amortizationType": 123,
  "interestType": 123,
  "interestCalculationPeriodType": 123,
  "transactionProcessingStrategyCode": "<string>",
  "expectedDisbursementDate": "<string>",
  "submittedOnDate": "<string>",
  "loanType": "<string>"
}
'

Documentation Index

Fetch the complete documentation index at: https://docs.api.bsa.ai/llms.txt

Use this file to discover all available pages before exploring further.

Submits a new loan application against an existing customer and loan product. The loan starts in submitted and pending approval state — it is not yet active or disbursed.

Request body

customerId
integer
required
The customer this loan is for.
productId
integer
required
The loan product to use as a template. List available products via GET /v1/loan-products.
principal
number
required
Requested principal amount.
loanTermFrequency
integer
required
Loan term in units of loanTermFrequencyType.
loanTermFrequencyType
integer
required
Term unit. 0=days, 1=weeks, 2=months, 3=years.
numberOfRepayments
integer
required
Total installments.
repaymentEvery
integer
required
How often repayments occur in units of repaymentFrequencyType.
repaymentFrequencyType
integer
required
Same scale as loanTermFrequencyType.
interestRatePerPeriod
number
required
Percentage rate per period (e.g. 1.5 for 1.5%/month).
amortizationType
integer
required
0=equal principal payments, 1=equal installments.
interestType
integer
required
0=declining balance, 1=flat.
interestCalculationPeriodType
integer
required
0=daily, 1=same as repayment period.
transactionProcessingStrategyCode
string
Optional. Identifies how repayments are allocated (penalties → fees → interest → principal vs other orderings). Defaults to the product-configured strategy if omitted.
expectedDisbursementDate
string
required
ISO-8601 YYYY-MM-DD.
submittedOnDate
string
required
ISO-8601 YYYY-MM-DD. The application’s submission date.
loanType
string
required
One of individual, group, jlg.

Example

curl -sf -X POST "$BASE/v1/loans" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": 42,
    "productId": 1,
    "principal": 5000,
    "loanTermFrequency": 12,
    "loanTermFrequencyType": 2,
    "numberOfRepayments": 12,
    "repaymentEvery": 1,
    "repaymentFrequencyType": 2,
    "interestRatePerPeriod": 1.5,
    "amortizationType": 1,
    "interestType": 0,
    "interestCalculationPeriodType": 1,
    "expectedDisbursementDate": "2026-06-01",
    "submittedOnDate": "2026-05-22",
    "loanType": "individual"
  }'

Response

200 OK returns the freshly-created loan object.

Errors

CodeWhen
invalid_argumentMissing required field, invalid date, or violation of product-level rules (e.g. principal outside product range)
not_foundcustomerId or productId does not exist
abortedCustomer is not active, or violates an LMS business rule