Confirm Loan Offer (Staff-Initiated)
Overview​
Fetches the borrower's salary history from Remita, computes a DTI-based loan offer, and persists a Draft RemitaLoanRequest that can be tracked through the normal approval workflow. This is a staff-initiated operation that does not require a customer CIF — the loan request is created with CIF = "STAFF_REQUEST".
The computed loan offer uses 70% of the 3-month minimum salary average (i.e., the bottom 3 salary payments out of the full history) as a conservative, risk-adjusted offer amount.
Command Details​
- Command:
ConfirmLoanOfferByStaffCommand - Type: Command (write operation)
- Route:
POST /api/Remitta/confirmloanofferbystaff(or via the unified BPM endpoint)
API Endpoint​
POST /api/bpm/cmd
Request Structure​
| Field | Type | Required | Description |
|---|---|---|---|
$type | string | Yes | Must be ConfirmLoanOfferByStaffCommand |
accountNumber | string | Yes | Borrower's bank account number |
bankCode | string | Yes | CBN bank code for the borrower's bank |
bvn | string | No | Borrower's Bank Verification Number |
firstName | string | No | Borrower's first name |
lastName | string | No | Borrower's last name |
middleName | string | No | Borrower's middle name |
phoneNumber | string | No | Borrower's mobile number |
useMobileNumberForSearch | bool | No | Search by phone number instead of BVN (default: false) |
authorisationChannel | string | No | Remita authorisation channel (default: "USSD") |
Remita supports three lookup strategies (applied in this priority order):
- Mobile number search — if
useMobileNumberForSearch: trueandphoneNumberis provided - BVN search — if
bvnis provided (along with name and account details) - Account number search — fallback using
accountNumber+bankCodeonly
Try It Out​
/api/bpm/cmdConfirmLoanOfferByStaffCommandOnly accountNumber and bankCode are required. Remita will look up the salary history using the account number alone. Provide bvn, firstName, lastName, and middleName for a more precise BVN-based lookup, or set useMobileNumberForSearch: true with a phoneNumber to search by mobile.
Full request example (BVN-based lookup)​
/api/bpm/cmdConfirmLoanOfferByStaffCommandResponse Structure​
Success:
{
"isSuccessful": true,
"statusCode": "00",
"message": "Loan Offer retrieved successfully",
"data": {
"id": 42,
"requestId": "1742641200000/1742641200000",
"accountNumber": "0012345678",
"bankCode": "058",
"applicationDate": "2026-03-22",
"customerName": "John Doe",
"companyName": "Acme Corporation",
"latestSalaryAverage": 450000.00,
"latestSalaryMaximum": 480000.00,
"latestSalaryMimumum": 420000.00,
"computedLoanOffer": 294000.00,
"installmentFeeRateDesc": "Loan Repayment",
"salaryPaymentDetailsList": [
{
"paymentDate": "2026-02-25",
"amount": 450000.00,
"accountNumber": "0012345678",
"bankCode": "058"
},
{
"paymentDate": "2026-01-25",
"amount": 480000.00,
"accountNumber": "0012345678",
"bankCode": "058"
},
{
"paymentDate": "2025-12-25",
"amount": 420000.00,
"accountNumber": "0012345678",
"bankCode": "058"
}
],
"loanHistoryDetails": []
}
}
Salary history not found:
{
"isSuccessful": false,
"statusCode": "01",
"message": "No salary history found for the provided account details."
}
How the Loan Offer is Computed​
| Step | Formula |
|---|---|
| Fetch salary history | Call Remita salary history API with provided account/BVN details |
| Sort payments | Order all salary payments ascending by amount |
| Take bottom 3 | Use the 3 lowest payments as the conservative baseline |
| Compute baseline average | Average of those 3 payments |
| Apply DTI cap | Multiply by 70% to get the safe repayment-to-income ratio |
| Round to 2 decimal places | Final computedLoanOffer |
latestSalaryMimumum (note: original Remita field name has a typo — "Mimumum") reflects the minimum salary payment across the full history, while computedLoanOffer uses the bottom-3 average for a more conservative offer.
Next Steps​
After receiving a loan offer, continue the loan lifecycle:
- Create Loan — Create a formal loan request using the offer details
- Submit for Approval — Submit the Draft loan for review
- Approve Loan — Approve the submitted loan request
- Activate Mandate — Activate the Remita salary deduction mandate
- Disburse Loan — Transfer funds to the borrower's account
Related Operations​
- Get Salary History — Raw salary history lookup (read-only, no loan created)
- Create Loan — Create a loan request manually
- Get Payment History — View repayment history for an active loan