List billers in a group
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/bill-payments/groups/{groupId}/billers \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/bill-payments/groups/{groupId}/billers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/bill-payments/groups/{groupId}/billers"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "01KZXPYGX5VZXDH9VHJ4YTPCB9",
"groupId": "01KZXPYGX5VZXDH9VHJ4YTPCA8",
"name": "Example Telco",
"slug": "example-telco",
"logo": null,
"requireVerification": false,
"status": "active"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1,
"totalPages": 1
}
}{
"statusCode": 400,
"message": "Must be a valid identifier.",
"code": "validation_failed",
"errors": [
{
"message": "Must be a valid identifier.",
"field": "accountId",
"code": "custom",
"path": [
"accountId"
]
}
]
}{
"statusCode": 401,
"code": "INVALID_API_KEY",
"message": "Invalid or inactive API credentials."
}{
"statusCode": 404,
"code": "resource_not_found",
"message": "Resource not found."
}{
"statusCode": 429,
"message": "Too many API requests. Try again later.",
"code": "api_key_rate_limit_exceeded",
"retryAfterSeconds": 17
}{
"statusCode": 500,
"code": "internal_server_error",
"message": "An unexpected error occurred."
}Bill payments
List billers in a group
The billers inside one group — the individual utilities, networks and merchants you can pay.
GET
/
v1
/
bill-payments
/
groups
/
{groupId}
/
billers
List billers in a group
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/bill-payments/groups/{groupId}/billers \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/bill-payments/groups/{groupId}/billers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/bill-payments/groups/{groupId}/billers"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "01KZXPYGX5VZXDH9VHJ4YTPCB9",
"groupId": "01KZXPYGX5VZXDH9VHJ4YTPCA8",
"name": "Example Telco",
"slug": "example-telco",
"logo": null,
"requireVerification": false,
"status": "active"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1,
"totalPages": 1
}
}{
"statusCode": 400,
"message": "Must be a valid identifier.",
"code": "validation_failed",
"errors": [
{
"message": "Must be a valid identifier.",
"field": "accountId",
"code": "custom",
"path": [
"accountId"
]
}
]
}{
"statusCode": 401,
"code": "INVALID_API_KEY",
"message": "Invalid or inactive API credentials."
}{
"statusCode": 404,
"code": "resource_not_found",
"message": "Resource not found."
}{
"statusCode": 429,
"message": "Too many API requests. Try again later.",
"code": "api_key_rate_limit_exceeded",
"retryAfterSeconds": 17
}{
"statusCode": 500,
"code": "internal_server_error",
"message": "An unexpected error occurred."
}A biller is scoped to its group, so a network selling both airtime and data appears as two billers with different ids and disjoint packages.
requireVerification says whether the enquiry validates the customer reference with the biller. Where it is false — airtime, data, betting wallets — the enquiry vends on sight.
Error codes
| Status | code | Cause |
|---|---|---|
400 | validation_failed | A page size above 100. |
404 | resource_not_found | No such group. |
401 | INVALID_API_KEY | The key is missing, invalid, inactive, expired, from the other environment, or blocked by its IP allowlist. |
429 | api_key_rate_limit_exceeded | The per-minute limit for this key was exceeded. |
Authorizations
A secret API key, sent as Authorization: Bearer sk_test_… in sandbox or Bearer sk_live_… in live.
Path Parameters
Group id from the groups list. A 26-character ULID.
Required string length:
26Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Example:
"01K2Z3AB4C5D6E7F8G9HJKMNPQ"
Query Parameters
One-based page number.
Required range:
x >= 1Records per page.
Required range:
1 <= x <= 100