Skip to main content
Meneja’s vendor loan feature connects your marketplace vendors with loan providers so vendors can access working capital directly through the platform. As an admin, you register loan providers, configure loan products for each provider, and then oversee the full lifecycle of every loan request — from initial submission by a vendor through to approval, disbursement, and repayment. All operations are available through the dashboard as well as the REST API.

Loan providers

A loan provider is a financial institution or lending organisation that offers loan products to your vendors. You must register at least one provider before vendors can apply for loans.
FieldDescription
business_nameLegal trading name of the provider
contact_emailPrimary contact email
contact_phonePrimary contact phone number
descriptionDescription of the provider and their offering
websiteProvider’s website (optional)
addressPhysical address (optional)
is_activeWhether the provider is available for new loan products
statusCurrent review status of the provider record
Provider statistics — total_loans, loan_growth, avg_loan_value, and repayment_rate — are aggregated automatically and visible on the provider’s detail page.

Register a provider

Send a POST request to /v1/loans/providers/ with the provider’s details:
{
  "tenant_id": "tenant-123",
  "user_id": "user-456",
  "business_name": "Fast Cash Loans",
  "contact_email": "contact@fastcash.com",
  "contact_phone": "+255700000000"
}
To list all providers registered to your tenant, send a GET request to /v1/loans/providers/ with the X-Tenant-ID header.

Loan products

Each provider offers one or more loan products. A product defines the financial terms that apply to any loan a vendor takes under that product.
FieldTypeDescription
namestringProduct display name
interest_ratenumberInterest rate as a percentage
interest_periodenumPeriod the rate applies to: DAILY, WEEKLY, MONTHLY, or YEARLY
interest_rate_typeenumHow interest compounds: FLAT, REDUCING, or REDUCING_BALANCE
term_durationnumberLength of the loan term
term_unitenumUnit for the term: DAYS, WEEKS, MONTHS, or YEARS
repayment_frequencyenumHow often repayments are due: DAILY, WEEKLY, BI_WEEKLY, or MONTHLY
min_amountnumberMinimum loan amount (optional)
max_amountnumberMaximum loan amount (optional)
processing_feenumberUpfront fee charged on disbursement (optional)
chargesobjectAdditional fees specific to this product
descriptionstringProduct description shown to vendors (optional)
terms_conditionsstringTerms and conditions text (optional)
is_activebooleanWhether the product is available for new requests

Create a loan product

Send a POST request to /v1/loans/products/ with the product definition:
{
  "provider_id": "{{provider_id}}",
  "name": "Small Biz Quick Loan",
  "interest_rate": 5.0,
  "interest_period": "MONTHLY",
  "interest_rate_type": "FLAT",
  "term_duration": 3,
  "term_unit": "MONTHS",
  "repayment_frequency": "MONTHLY",
  "charges": {}
}
To retrieve all products for a given provider, send a GET request to /v1/loans/products/provider/{provider_id}.

Loan requests

When a vendor applies for a loan, Meneja creates a LoanRequest record. You review, approve, and disburse loans from the Vendor Loans section of the dashboard.

Loan request fields

FieldDescription
vendor_idThe vendor applying for the loan
product_idThe loan product selected by the vendor
loan_amountThe amount approved for the loan
amount_requestedThe amount the vendor originally requested
interest_rateRate inherited from the product at the time of application
payment_frequencyweekly, bi-weekly, or monthly
term_lengthLoan duration in months
total_payableTotal amount due including interest and fees
remaining_balanceOutstanding balance on an active loan
purposeVendor-provided reason for the loan
statusCurrent lifecycle status (see below)
payment_scheduleArray of scheduled installments
documentsSupporting documents submitted with the application
penaltiesAny penalties applied for missed or late payments

Loan statuses

StatusMeaning
pendingSubmitted by the vendor, awaiting admin review
approvedApproved by the admin, awaiting disbursement
rejectedDeclined — rejection_reason is populated
disbursedFunds have been released to the vendor
activeLoan is live and repayments are being collected
completedAll repayments received, loan closed
defaultedVendor has failed to meet repayment obligations

The loan lifecycle

1

Vendor submits a loan request

The vendor selects a product and submits a request via the marketplace. Meneja sends a POST to /v1/loans/requests with the following payload:
{
  "product_id": "{{product_id}}",
  "borrower_id": "user-789",
  "amount_requested": 10000.0
}
The request is created with status: pending. You can retrieve it at any time with a GET to /v1/loans/requests/{request_id}.
2

Admin reviews the request

Open Growth Tools → Vendor Loans → Requests in the dashboard. Click the request to view the vendor’s profile, the loan product terms, the requested amount, the stated purpose, and any supporting documents.The vendor details panel shows business registration information, KYC documents, bank details, transaction statistics, outstanding payments, and current orders — giving you the context needed to assess creditworthiness.
3

Approve or reject the request

To approve, send a POST to /v1/loans/requests/{request_id}/approve. This moves the status to approved and stamps approved_at and approved_by.To reject, update the status to rejected and provide a rejection_reason so the vendor understands why their application was declined.
4

Disburse the loan

Once approved, disburse funds by sending a POST to /v1/loans/{loan_id}/disburse. This moves the status to disbursed and stamps disbursed_at and disbursed_by. The loan then transitions to active once the payment schedule begins.The loan record is created at this point, containing the principal_amount, total_expected_interest, total_fees, outstanding_balance, the full schedules array, and a repayments array.
5

Track repayments

Each installment in the payment schedule has a status of pending, upcoming, paid, overdue, or partial. As the vendor makes payments, record each repayment with a POST to /v1/loans/{loan_id}/repayments:
{
  "amount": 3500.0,
  "method": "m-pesa"
}
Each repayment record captures the amount_paid, payment_method, payment_date, optional reference_number, and a status of COMPLETED, PENDING, FAILED, or SUCCESS.
6

Close or flag the loan

When all scheduled payments are received, the loan status moves to completed. If a vendor misses payments beyond the allowed threshold, update the status to defaulted and record a penalty with the amount, reason, and applied_at timestamp.

Payment schedules

Each active loan has a payment schedule — one entry per installment — generated at disbursement.
FieldDescription
installment_numberSequence number of this payment
principal_duePrincipal portion of this installment
interest_dueInterest portion of this installment
fees_dueAny fees due with this installment
amount_dueTotal amount due (principal_due + interest_due + fees_due)
due_dateDate the payment is expected
statusPAID, PENDING, or OVERDUE
You can retrieve the full schedule and repayment history for any active loan with a GET request to /v1/loans/{loan_id}.

Penalties

If a vendor misses or underpays an installment, you can apply a penalty:
FieldDescription
amountPenalty amount in the local currency
reasonDescription of the breach that triggered the penalty
applied_atWhen the penalty was recorded
statuspending, paid, or waived
paid_atPopulated when the penalty is settled
Yes. Register each provider separately under /v1/loans/providers/ and then create products under each provider. Vendors see all active products when they apply.
The loan requests list can be filtered by status, vendor_id, product_id, provider_id, amount range (min_amount, max_amount), and date range (start_date, end_date).
The vendor details panel on a loan request shows KYC documents (business license, business certificate, TRA certificate), bank details, business registration information, and transaction statistics such as total transaction count, total value, and last transaction date.