List bill payments
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/bill-payments \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/bill-payments', 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"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "01K2Z3AB4X5Y6Z7A8BCDEFGHJK",
"externalReference": "bill_20260814_001",
"paymentReference": "SKWV-BIL-01K2Z3AB4X5Y6Z7A8BCDEFGHJK",
"providerTransactionId": "CP-88213471",
"status": "confirmed",
"subCategory": "utility",
"amount": "5000.00",
"charge": "100.00",
"commission": "0.00",
"totalDebit": "5100.00",
"currency": "NGN",
"group": {
"name": "Electricity",
"slug": "DISCO"
},
"biller": {
"name": "Example Disco",
"slug": "EXAMPLE_DISCO"
},
"package": {
"name": "Prepaid",
"slug": "EXAMPLE_DISCO_PREPAID"
},
"customerReferenceLast4": "7788",
"customerName": "ADA OKAFOR",
"customerAddress": "14 Marina Road",
"vendStatus": "SUCCESSFUL",
"providerStatusCode": "00",
"tokenData": {
"token": "1234-5678-9012-3456-7890",
"units": "31.4"
},
"failureReason": null,
"createdAt": "2026-08-14T09:15:00.000Z",
"updatedAt": "2026-08-14T09:15:06.000Z"
}
],
"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": 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 bill payments
Bill payments made by your business, newest first.
GET
/
v1
/
bill-payments
List bill payments
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/bill-payments \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/bill-payments', 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"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "01K2Z3AB4X5Y6Z7A8BCDEFGHJK",
"externalReference": "bill_20260814_001",
"paymentReference": "SKWV-BIL-01K2Z3AB4X5Y6Z7A8BCDEFGHJK",
"providerTransactionId": "CP-88213471",
"status": "confirmed",
"subCategory": "utility",
"amount": "5000.00",
"charge": "100.00",
"commission": "0.00",
"totalDebit": "5100.00",
"currency": "NGN",
"group": {
"name": "Electricity",
"slug": "DISCO"
},
"biller": {
"name": "Example Disco",
"slug": "EXAMPLE_DISCO"
},
"package": {
"name": "Prepaid",
"slug": "EXAMPLE_DISCO_PREPAID"
},
"customerReferenceLast4": "7788",
"customerName": "ADA OKAFOR",
"customerAddress": "14 Marina Road",
"vendStatus": "SUCCESSFUL",
"providerStatusCode": "00",
"tokenData": {
"token": "1234-5678-9012-3456-7890",
"units": "31.4"
},
"failureReason": null,
"createdAt": "2026-08-14T09:15:00.000Z",
"updatedAt": "2026-08-14T09:15:06.000Z"
}
],
"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": 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."
}Poll
status=pending to find payments the biller has not yet resolved. A reconciler chases them in the background, so a pending payment is being worked on rather than stuck.
Error codes
| Status | code | Cause |
|---|---|---|
400 | validation_failed | An unknown status, or a page size above 100. |
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.
Query Parameters
One-based page number.
Required range:
x >= 1Records per page.
Required range:
1 <= x <= 100Filter by payment status.
Available options:
submitted, pending, confirmed, failed