List products
Returns the products that the caller offers, each with its published version, ordered by key. Cowdi edits the products. The caller only reads them. 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
Query Parameters
Maximum number of products 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
curl -X GET "https://example.com/v1/products?size=20"{ "data": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "organization_id": "cowdi", "key": "ACME_FLAT_RATE", "category": "TERM_LOAN", "published_version": { "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" }, "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": "RATE_LIMIT_EXCEEDED", "description": "Too Many Requests"}{ "code": "INTERNAL_ERROR", "description": "Internal Server Error"}Download a statement document GET
Returns the download view of one rendition: its status and, when ready and still within its retention window, a short-lived presigned link. A ready rendition past its retention window reports an `EXPIRED` failure code with no link; request the statement again to regenerate it. Not available while impersonating the caller. Requires an authenticated, active user. Returns 404 when the statement does not exist, does not belong to the caller, or `format` is not one of the statement's renditions.
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.