Debt as a Service
Debt as a Service lets eligible Customers finance a purchase through your platform. Create a Customer first, then check eligibility, request the loan, collect consent, and track status.
Loan create requires a merchant disbursement bank account (bank_account_no and bank_code). Link a card or direct debit on the Customer before offering repayment methods that depend on them.
Endpoints
- GET/loans/bnpl/customers/{customerId}/eligibilityCheck Eligibility
- POST/loans/bnpl/customers/{customerId}/loansRequest Loan
- GET/loans/bnpl/customers/{customerId}/loans/activeGet Active Loans
- POST/loans/bnpl/loans/{loanId}/consent/requestRequest Consent
- POST/loans/bnpl/loans/{loanId}/consent/verifyVerify Consent
- GET/loans/bnpl/loans/{loanId}Get Loan Status
Check Eligibility GET/loans/bnpl/customers/{customerId}/eligibility
Returns whether the Customer is eligible for Debt as a Service and the available amount band and tenures.
Path Parameters
- Name
customerId- Type
- string
- Description
Customer id from Create Customer.
Create a Customer first. This endpoint is a prerequisite before requesting a loan.
curl https://api.aellaapp.com/loans/bnpl/customers/cust-uuid/eligibility \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"message": "BNPL eligibility fetched successfully",
"data": {
"is_eligible": true,
"min_amount": 1000,
"max_amount": 50000,
"currency": "NGN",
"durations": [
1,
2,
3
],
"ineligible_reason": null
},
"status": 200
}
Request Loan POST/loans/bnpl/customers/{customerId}/loans
Creates a Debt as a Service loan request for the Customer. Disbursement requires a merchant bank account.
Request Body
- Name
customerId- Type
- string
- Description
Customer id from Create Customer.
- Name
amount- Type
- number
- Description
Loan amount in Naira. Minimum 1.
- Name
tenor- Type
- number
- Description
Loan tenor. Must be one of the tenures from eligibility.
- Name
bank_account_no- Type
- string
- Description
Ten-digit merchant disbursement account number.
- Name
bank_code- Type
- string
- Description
Six-digit bank code for the disbursement account.
- Name
interest_rate- Type
- number
- Description
Optional interest rate override for the loan request.
- Name
start_date- Type
- string
- Description
Optional loan start date.
- Name
end_date- Type
- string
- Description
Optional loan end date.
- Name
metadata- Type
- object
- Description
Optional merchant metadata stored on the Sabo request log.
bank_account_no must be 10 digits and bank_code must be 6 digits — these identify where the loan proceeds are disbursed.
curl https://api.aellaapp.com/loans/bnpl/customers/cust-uuid/loans \
-X POST \
-H "Content-Type: application/json" \
-d '{"amount":10000,"tenor":3,"bank_account_no":"0123456789","bank_code":"090416","metadata":{"reference":"merchant-order-1"}}' \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"message": "BNPL loan request created successfully",
"data": {
"id": "loan-uuid",
"customer_id": "cust-uuid",
"amount": 10000,
"tenor": 3,
"downstream_loan_id": "mkopo-id",
"consent_status": "pending_consent",
"requirements": {
"min_cards": 1,
"linked_cards": 0,
"cards_satisfied": false,
"min_direct_debits": 1,
"linked_direct_debits": 0,
"direct_debits_satisfied": false,
"all_satisfied": false
}
},
"status": 200
}
Get Active Loans GET/loans/bnpl/customers/{customerId}/loans/active
Returns the Customer's current active Debt as a Service loans for the authenticated merchant, including repayment schedules.
Path Parameters
- Name
customerId- Type
- string
- Description
Customer id from Create Customer.
curl https://api.aellaapp.com/loans/bnpl/customers/cust-uuid/loans/active \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"message": "Active BNPL loans fetched successfully",
"data": [
{
"id": "mkopo-id",
"customer_id": "cust-uuid",
"organization_id": "merchant-uuid",
"merchant_id": "merchant-uuid",
"amount": 10000,
"tenor": 3,
"downstream_loan_id": "mkopo-id",
"status": "running",
"status_text": "Running",
"sub_status": null,
"environment": "SANDBOX",
"schedules": [
{
"id": "schedule-uuid",
"loan_id": "mkopo-id",
"amount": 3333.33,
"principal_amount": 3000,
"interest_amount": 333.33,
"balance": 3333.33,
"payment_channel": "directdebit",
"status_id": 0,
"status_text": "pending",
"due_date": "2026-09-01T00:00:00.000Z"
}
],
"created_at": "2026-08-01T00:00:00.000Z"
}
],
"status": 200
}
Request Consent POST/loans/bnpl/loans/{loanId}/consent/request
Starts the consent challenge for a pending Debt as a Service loan. The Customer receives an OTP to approve.
Request Body
- Name
loanId- Type
- string
- Description
Loan id returned from Request Loan.
curl https://api.aellaapp.com/loans/bnpl/loans/loan-uuid/consent/request \
-X POST \
-H "Content-Type: application/json" \
-d '{}' \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"message": "Consent OTP sent successfully",
"data": null,
"status": 200
}
Verify Consent POST/loans/bnpl/loans/{loanId}/consent/verify
Verifies the OTP from Request Consent and marks the loan as consented when valid.
Request Body
- Name
loanId- Type
- string
- Description
Loan id returned from Request Loan.
- Name
otp- Type
- string
- Description
One-time password sent to the Customer.
curl https://api.aellaapp.com/loans/bnpl/loans/loan-uuid/consent/verify \
-X POST \
-H "Content-Type: application/json" \
-d '{"otp":"123456"}' \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"message": "Consent verified and loan accepted",
"data": {
"id": "loan-uuid",
"consent_status": "consented"
},
"status": 200
}
Get Loan Status GET/loans/bnpl/loans/{loanId}
Fetches the current status of a Debt as a Service loan, including consent state.
Path Parameters
- Name
loanId- Type
- string
- Description
Loan id returned from Request Loan.
curl https://api.aellaapp.com/loans/bnpl/loans/loan-uuid \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"message": "BNPL loan fetched successfully",
"data": {
"id": "loan-uuid",
"status": "pending_acceptance",
"status_text": "Offer Awaiting Acceptance",
"schedules": [
{
"id": "schedule-uuid",
"loan_id": "mkopo-id",
"amount": 3333.33,
"principal_amount": 3000,
"interest_amount": 333.33,
"balance": 3333.33,
"payment_channel": "directdebit",
"status_id": 0,
"status_text": "pending",
"due_date": "2026-09-01T00:00:00.000Z"
}
],
"requirements": {
"all_satisfied": true
}
},
"status": 200
}