Skip to content

Create & Book Business Loan

Business loans are managed under the /business-loans resource. Loan IDs use the BL. prefix. A loan moves through a main status, and while awaiting a credit decision it also carries a separate decision status.

The type you set at creation determines amortization and whether withdrawals are allowed.

typeDescription
DURATION_ANNUITYFixed-term loan with annuity (level) payments.
DURATION_STRAIGHTFixed-term loan with straight amortization.
DURATION_BULLETFixed-term loan, principal repaid at maturity.
NON_DURATION_REVOLVING_CREDITOpen-ended revolving credit line. Only this type supports withdrawals.
StatusMeaning
CREATEDCreated, not yet activated.
ARCHIVEDArchived before activation (reversible).
PENDING_DECISIONActivated and awaiting a credit decision.
DENIEDCredit decision denied. Terminal.
ACTIVATEDCredit decision approved; loan is live.
PAUSEDTemporarily paused.
CLOSEDFully repaid and closed. Terminal.
STOPPEDTerminated. Terminal.
CREATED ──activate──> PENDING_DECISION ──approve──> ACTIVATED ──> PAUSED
│ │ │ │
│ └────────deny───────> DENIED │ │
└──archive──> ARCHIVED └──> CLOSED / STOPPED

While mainStatus is PENDING_DECISION, the loan also carries a decision status used to track the underwriting workflow: PENDING, READY_FOR_DECISION, WAITING, REFINANCE, and the terminal DECIDED. Both approve and deny set the decision status to DECIDED.

  1. Create the loan.

    Terminal window
    curl -X POST "https://$HOST/business-loans" \
    -H "Authorization: Bearer $JWT" \
    -H "Content-Type: application/json" \
    -d '{
    "clientId": "C.100100",
    "type": "DURATION_ANNUITY",
    "currency": "SEK",
    "total": "100000.00",
    "loanProfileCode": "<profile-code>"
    }'

    The loan is created with mainStatus = CREATED. Required right: CreateBusinessLoan.

  2. Activate it.

    Pass ?activate=1 on the create call to create and activate in one step (this is what the Operations Portal does), or activate an existing CREATED loan separately. Activation:

    • sets mainStatus to PENDING_DECISION,
    • sets decisionStatusCode to PENDING,
    • generates the payment reference (OCR),
    • attaches the loan profile resolved from loanProfileCode + currency.
    Terminal window
    curl -X POST "https://$HOST/business-loans?activate=1" \
    -H "Authorization: Bearer $JWT" \
    -H "Content-Type: application/json" \
    -d '{ "clientId": "C.100100", "type": "DURATION_ANNUITY", "currency": "SEK", "total": "100000.00", "loanProfileCode": "<profile-code>" }'
  3. (Optional) Move the decision status as underwriting progresses.

    Terminal window
    curl -X PUT "https://$HOST/business-loans/$BL_ID/credit-decision/move" \
    -H "Authorization: Bearer $JWT" \
    -H "Content-Type: application/json" \
    -d '{ "status": "READY_FOR_DECISION" }'

    Only allowed while mainStatus is PENDING_DECISION and the loan has not already been DECIDED. Required right: UpdateCreditDecisionStatus.

  4. Approve or deny the credit decision.

    Approve (right CreditDecisionApproveBusinessLoans):

    Terminal window
    curl -X PUT "https://$HOST/business-loans/$BL_ID/credit-decision/approve" \
    -H "Authorization: Bearer $JWT"

    Approval moves mainStatus to ACTIVATED, sets decisionStatusCode to DECIDED, and books the loan:

    • For fixed-term loans, creates a BUSINESS_LOAN_BOOKED financial event for the approved total. Revolving credit starts at a zero balance, so no booked event is created up front.
    • Creates the loan’s client (fund) account and payment reference.
    • Books any initial fees per their charge method (a BEFORE_PAYOUT fee is booked then written off against the payout; INSTALLMENT_ALL fees are spread across installments instead).
    • Seeds the repayment ledger events.

    Deny (right CreditDecisionDenyBusinessLoans):

    Terminal window
    curl -X PUT "https://$HOST/business-loans/$BL_ID/credit-decision/deny" \
    -H "Authorization: Bearer $JWT"

    Denial sets mainStatus to DENIED and decisionStatusCode to DECIDED. This is terminal.

  5. Read state and related detail.

    Terminal window
    curl "https://$HOST/business-loans/$BL_ID" -H "Authorization: Bearer $JWT"

    Sub-resources: /fees, /guarantors, /profile, /financial-events.

Withdrawals apply only to NON_DURATION_REVOLVING_CREDIT loans and use a dual-confirmation flow.

Terminal window
curl -X PUT "https://$HOST/business-loans/$BL_ID/withdraw" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{
"amount": 15000.00,
"requestedDate": "2026-04-15",
"description": "Operational costs"
}'

Validation: the amount must be greater than zero and must not exceed the available balance; requestedDate, if given, must be today or later; the loan must be ACTIVATED and of revolving-credit type; and no other withdrawal request may already be pending. Required right: CreateBusinessLoanWithdrawal.

The available balance is exposed read-only on the loan as totalLoanApproved, totalLoanUsed, and totalLoanAvailable (computed only while ACTIVATED or PAUSED).

Every monetary change is recorded as a financial event (GET /business-loans/<id>/financial-events). Common type codes:

CodeWhen
BUSINESS_LOAN_BOOKEDLoan booked on approval (fixed-term loans).
BUSINESS_LOAN_WITHDRAWALApproved withdrawal on revolving credit.
BUSINESS_LOAN_PAYMENTPayment received.
BUSINESS_LOAN_FEE / BUSINESS_LOAN_INTERESTFee or interest added.
BUSINESS_LOAN_FEE_WRITE_OFF / BUSINESS_LOAN_INTEREST_WRITE_OFFFee or interest written off.
BUSINESS_LOAN_INSTALLMENT_INVOICE_FINANCED / BUSINESS_LOAN_INSTALLMENT_SERVICE_PAYMENTInstallment booked from an invoice.

The full field surface for each call is in the reference under the business-loans tag.