The Save App loan system lets members request funds against their accumulated savings and gives admins the tools to review and act on those requests. Members can list their own loans and submit new requests, while admins see all loans across the group and can approve or reject pending ones.Documentation Index
Fetch the complete documentation index at: https://docs.digiflecttech.dev/llms.txt
Use this file to discover all available pages before exploring further.
Loan statuses
A loan moves through the following statuses during its lifecycle:| Status | Meaning |
|---|---|
PENDING | Submitted and awaiting admin approval |
APPROVED | All admins have approved; funds can be disbursed |
ACTIVE | Loan is currently being repaid |
COMPLETED | Fully repaid |
REJECTED | Declined by an admin |
OVERDUE | Active loan that has passed its due date |
List loans
Retrieve a paginated list of loans. Members only see their own loans; admins see all loans in the group. Filter by status using thestatus query parameter.
Query parameters
Filter loans by status. Accepted values:
pending, approved, active, completed, rejected, overdue.Number of loans to return per page. Minimum
1, maximum 100.Number of loans to skip before returning results. Use with
limit for pagination.Response fields
Array of loan objects matching the query.
Total number of loans matching the query, before pagination.
The
limit value applied to this response.The
offset value applied to this response.Example
Submit a loan request
Submit a new loan request on behalf of a member. The requesting member must not have an existing active or pending loan, and the amount must not exceed their eligibility (3× total contributions).Request body
Full name of the member requesting the loan. Must match an existing member record. Minimum 2 characters, maximum 100 characters.
Loan principal in the group’s currency. Must be greater than
0 and must not exceed the member’s maximum eligibility (3× their total contributions).Repayment duration in months. Minimum
1, maximum 24.Purpose of the loan. Minimum 2 characters, maximum 200 characters.
Full name of the guarantor. Minimum 2 characters, maximum 100 characters.
Ugandan phone number for the guarantor. Must match the pattern
^\+?256[0-9]{9}$.A unique key (maximum 100 characters) to make the request idempotent. If you submit a request with an
idempotency_key that was already used, the API returns the original loan response instead of creating a duplicate.Response
Returns a loan object withstatus: "PENDING".
Example
Approve a loan
Record an admin’s approval for a pending loan. Approval requires unanimous consent from all active admins in the group. Each admin must call this endpoint separately; the loan status changes toACTIVE only after every admin has approved.
This endpoint is restricted to admin users. A loan remains in
PENDING status until all active admins have approved it. The API response indicates how many approvals have been recorded so far (e.g., 2/3 admins have approved).Path parameters
The unique identifier of the loan to approve.
Response
true when the approval was recorded successfully.A human-readable message indicating either that approval is unanimous and the loan is now
ACTIVE, or showing the running tally (e.g., "2/3 admins have approved").Example
Reject a loan
Reject a pending loan request. Only admins can reject loans. The rejection reason is appended to the loan’s existing reason field for audit purposes.Path parameters
The unique identifier of the loan to reject.
Request body
Explanation for the rejection. Minimum 2 characters, maximum 200 characters. This is appended to the loan record as
[REJECTED: <reason>].Response
true when the loan was rejected successfully.Confirmation message, e.g.
"Loan rejected".