List cards
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/cards \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/cards', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/cards"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "01K2Z3AB4S5T6V7W8XYZABCDEF",
"label": "Ada travel card",
"type": "virtual",
"brand": "mastercard",
"currency": "USD",
"status": "active",
"maskedPan": "•••• •••• •••• 4242",
"expiryMonth": 8,
"expiryYear": 2028,
"holder": {
"type": "customer",
"id": "01K2Z3AB4C5D6E7F8G9HJKMNPQ",
"name": "Ada Okafor"
},
"balance": "5000",
"balanceFormatted": "50.00",
"spendingControls": {
"transactionAmountLimit": "2000",
"dailyAmountLimit": "5000",
"dailyTransactionCount": 10
},
"operations": [
{
"id": "01K2Z3AB4R5S6T7V8WXYZABCDE",
"cardId": "01K2Z3AB4S5T6V7W8XYZABCDEF",
"type": "issuance",
"status": "completed",
"sourceCurrency": "NGN",
"destinationCurrency": "USD",
"sourceAmount": "8000000",
"destinationAmount": "5000",
"failureCode": null,
"failureReason": null,
"completedAt": "2026-08-14T09:12:00.000Z",
"createdAt": "2026-08-14T09:11:40.000Z",
"updatedAt": "2026-08-14T09:12:00.000Z"
}
],
"createdAt": "2026-08-14T09:11:40.000Z",
"updatedAt": "2026-08-14T09:12: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": 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."
}Cards
List cards
Cards belonging to your business. Each item carries its balance, holder, and operation history.
GET
/
v1
/
cards
List cards
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/cards \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/cards', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/cards"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"items": [
{
"id": "01K2Z3AB4S5T6V7W8XYZABCDEF",
"label": "Ada travel card",
"type": "virtual",
"brand": "mastercard",
"currency": "USD",
"status": "active",
"maskedPan": "•••• •••• •••• 4242",
"expiryMonth": 8,
"expiryYear": 2028,
"holder": {
"type": "customer",
"id": "01K2Z3AB4C5D6E7F8G9HJKMNPQ",
"name": "Ada Okafor"
},
"balance": "5000",
"balanceFormatted": "50.00",
"spendingControls": {
"transactionAmountLimit": "2000",
"dailyAmountLimit": "5000",
"dailyTransactionCount": 10
},
"operations": [
{
"id": "01K2Z3AB4R5S6T7V8WXYZABCDE",
"cardId": "01K2Z3AB4S5T6V7W8XYZABCDEF",
"type": "issuance",
"status": "completed",
"sourceCurrency": "NGN",
"destinationCurrency": "USD",
"sourceAmount": "8000000",
"destinationAmount": "5000",
"failureCode": null,
"failureReason": null,
"completedAt": "2026-08-14T09:12:00.000Z",
"createdAt": "2026-08-14T09:11:40.000Z",
"updatedAt": "2026-08-14T09:12:00.000Z"
}
],
"createdAt": "2026-08-14T09:11:40.000Z",
"updatedAt": "2026-08-14T09:12: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": 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."
}Error codes
| Status | code | Cause |
|---|---|---|
400 | validation_failed | An unknown parameter, 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. |
404 | card_not_found | No such card for this business. |
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 card status.
Available options:
creating, active, frozen, funding_failed, terminating, used, terminated, failed, fraud Filter by card type.
Available options:
virtual, disposable