List transactions
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/transactions \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/transactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "01K2Z3AB4K5M6N7P8QRSTVWXYZ",
"account": {
"id": "01K2Z3AB4D5E6F7G8H9JKMNPQR",
"name": "Ada NGN wallet",
"tag": "AA0271849366",
"type": "operational",
"category": "fiat"
},
"amount": "2500000",
"amountFormatted": "25000.00",
"fee": "5000",
"feeFormatted": "50.00",
"balanceBefore": "5000000",
"balanceBeforeFormatted": "50000.00",
"balanceAfter": "2495000",
"balanceAfterFormatted": "24950.00",
"currency": "NGN",
"type": "debit",
"category": "transfer",
"subCategory": "outward",
"status": "completed",
"channel": "internal",
"internalReference": "txn_sandbox_tutorial_001",
"externalReference": "payout_20260814_001",
"groupReference": null,
"reversalOfTransactionId": null,
"narration": "Sandbox tutorial transfer",
"createdAt": "2026-08-14T09:08:00.000Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1,
"pageCount": 1,
"hasNext": false,
"hasPrevious": false
}
}{
"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": 409,
"code": "resource_conflict",
"message": "The request conflicts with the current resource state."
}{
"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."
}Transactions
List transactions
Returns ledger transactions belonging to the authenticated business.
GET
/
v1
/
transactions
List transactions
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/transactions \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/transactions"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "01K2Z3AB4K5M6N7P8QRSTVWXYZ",
"account": {
"id": "01K2Z3AB4D5E6F7G8H9JKMNPQR",
"name": "Ada NGN wallet",
"tag": "AA0271849366",
"type": "operational",
"category": "fiat"
},
"amount": "2500000",
"amountFormatted": "25000.00",
"fee": "5000",
"feeFormatted": "50.00",
"balanceBefore": "5000000",
"balanceBeforeFormatted": "50000.00",
"balanceAfter": "2495000",
"balanceAfterFormatted": "24950.00",
"currency": "NGN",
"type": "debit",
"category": "transfer",
"subCategory": "outward",
"status": "completed",
"channel": "internal",
"internalReference": "txn_sandbox_tutorial_001",
"externalReference": "payout_20260814_001",
"groupReference": null,
"reversalOfTransactionId": null,
"narration": "Sandbox tutorial transfer",
"createdAt": "2026-08-14T09:08:00.000Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1,
"pageCount": 1,
"hasNext": false,
"hasPrevious": false
}
}{
"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": 409,
"code": "resource_conflict",
"message": "The request conflicts with the current resource state."
}{
"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."
}Prerequisites
Use a transactions-capable business account and a valid API key.This operation is limited to 600 requests per minute per business and API key.
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 >= 1Number of records per page.
Required range:
1 <= x <= 100Case-insensitive search term. Maximum 100 characters.
Maximum string length:
100Sort field and direction.
Available options:
createdAt, -createdAt, amount, -amount, status, -status Filter by asset code.
Available options:
NGN, USD, GBP, EUR, GHS, ZAR, UGX, CAD, MXN, AED, BTC, ETH, USDT, USDC Filter by ledger direction.
Available options:
debit, credit Filter by account ID. A 26-character ULID.
Required string length:
26Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Example:
"01K2Z3AB4C5D6E7F8G9HJKMNPQ"
Filter by transaction status.
Available options:
pending, completed, failed, reversed, rejected Filter by category.
Available options:
card, transfer, bills_payment, crypto Filter by subcategory. It must belong to category when both are supplied.
Available options:
charge, card_funding, card_withdrawal, refund, crypto_deposit, crypto_withdrawal, utility, data, airtime, cable_tv, education, betting, donation, internet, transport, other, inward, outward