List product versions
Returns the versions of a product, the newest first. Returns 404 when the caller offers no product with this id. Requires the org:products:read permission.
Authorization
oauth2 Create a client with POST /v1/oauth/clients, then exchange its credentials for an access token. AUTHORIZATION_CODE clients act on behalf of a signed-in user and always use PKCE; CLIENT_CREDENTIALS clients act as themselves. A client may only be granted scopes its creator already holds — read the grantable list from GET /v1/oauth/clients/scopes.
In: header
Path Parameters
The id of the product
uuidQuery Parameters
Maximum number of versions to return.
0 < value20Opaque cursor for the page after this one. Omit for the first page.
Opaque cursor for the page before this one. Omit for the first page.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/products/0f6b3c2e-6b1d-4e8a-9a51-2f7c8d9e0a1b/versions?size=20"{ "data": [ { "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "product_id": "550e8400-e29b-41d4-a716-446655440000", "version": 1, "status": "DRAFT", "name": "Weekly loan", "description_template": "You pay a fixed {interest_rate} fee for {interest_period_value, plural, one{# week} other{# weeks}}.", "ussd_description_template": "string", "terms": { "product": "TERM_LOAN", "penalty_fee_configuration": { "enabled": false }, "block_policy": {}, "billing_strategy": "ARREARS", "allocation_order": [ "PENALTY", "ARREARS", "INTEREST", "PRINCIPAL" ], "grace_period": { "value": 3, "unit": "DAYS" }, "payment_grace_period": { "value": 0, "unit": "DAYS" }, "tenure": { "duration": 4, "unit": "WEEKS" }, "interest_rate": { "basis_points": 300, "period": { "value": 1, "unit": "WEEKS" }, "day_count_convention": "ACTUAL_365" }, "interest_calculation_method": "FLAT_RATE", "fixed_interest": null, "accrual_period": null, "billing_period": { "value": 1, "unit": "WEEKS" }, "recalculation_mode": "FIXED_TENURE", "fixed_emi_amount": null, "interest_accrual_base": "PRINCIPAL", "interest_billing_mode": "UPFRONT", "can_spend_continuously": false, "can_reborrow": false, "can_spend_in_arrears": true, "has_deferred_start": false }, "published_at": "2026-10-08T10:15:30Z", "created_at": "2026-09-01T10:15:30Z", "resource_id": "string" } ], "links": { "next": "/v1/payees?after=eyJpZCI6MX0", "prev": "/v1/payees?before=eyJpZCI6MX0" }}{ "code": "BAD_REQUEST", "description": "Bad Request"}{ "code": "UNAUTHORISED", "description": "Unauthorised"}{ "code": "FORBIDDEN", "description": "Forbidden"}{ "code": "BAD_REQUEST", "description": "Invalid input"}{ "code": "RATE_LIMIT_EXCEEDED", "description": "Too Many Requests"}{ "code": "INTERNAL_ERROR", "description": "Internal Server Error"}Get a product GET
Returns a product with its published version. Returns 404 when the caller offers no product with this id. Requires the `org:products:read` permission. To read every version, list the versions of the product.
Create a loan application POST
Returns a quote for the organization in the path. The request schema's `anyOf` lists the supported configurations by organization. Organization clients must send `user_id` with the `org:lending.loan_applications:write` scope. Select optional `loan_product` from `GET /v1/accounts/loan/products/{organization}`, or omit it for the default product. Returns the existing open quote or 409 for an active loan account, an application in progress, or a concurrent application. A credit line product opens the credit line account at the first apply. Without an approved credit-limit override, returns 400 `LOAN_NOT_ELIGIBLE` when the user has no active merchant record, and 400 `PHONE_NUMBER_REQUIRED` when the user has no phone number. Next, send `loan_amount` and optional `reference_id` to `POST /v1/accounts/loan/applications/{organization}/{application_id}/apply`. Returns 404 when the organization does not offer the product to the user, or when that check cannot complete.