List transfer recipients
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/transfer-recipients \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/transfer-recipients', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/transfer-recipients"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)[
{
"id": "01K2Z3AB4G5H6J7K8MNPQRSTVW",
"type": "individual",
"displayName": "Ada Okafor",
"relationship": "vendor",
"email": "ada@example.com",
"phoneNumber": "+2348012345678",
"address": null,
"defaultPaymentDetailId": "01K2Z3AB4Q5R6S7T8VWXYZABCD",
"paymentDetails": [
{
"id": "01K2Z3AB4Q5R6S7T8VWXYZABCD",
"recipientId": "01K2Z3AB4G5H6J7K8MNPQRSTVW",
"routeId": "01K2Z3AB4M5N6P7Q8RSTVWXYZA",
"paymentMethod": "bank-transfer",
"currency": "KES",
"country": "KE",
"accountHolderName": "Ada Okafor",
"institutionName": "Example Bank",
"maskedIdentifier": "•••• 6789",
"isDefault": true,
"providerLocked": false,
"createdAt": "2026-08-14T09:06:00.000Z"
}
],
"createdAt": "2026-08-14T09:05:00.000Z"
}
]{
"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."
}Transfer destinations
List transfer recipients
Every active saved recipient, each with its payment details inlined. Deleted recipients are never returned.
GET
/
v1
/
transfer-recipients
List transfer recipients
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/transfer-recipients \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/transfer-recipients', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/transfer-recipients"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)[
{
"id": "01K2Z3AB4G5H6J7K8MNPQRSTVW",
"type": "individual",
"displayName": "Ada Okafor",
"relationship": "vendor",
"email": "ada@example.com",
"phoneNumber": "+2348012345678",
"address": null,
"defaultPaymentDetailId": "01K2Z3AB4Q5R6S7T8VWXYZABCD",
"paymentDetails": [
{
"id": "01K2Z3AB4Q5R6S7T8VWXYZABCD",
"recipientId": "01K2Z3AB4G5H6J7K8MNPQRSTVW",
"routeId": "01K2Z3AB4M5N6P7Q8RSTVWXYZA",
"paymentMethod": "bank-transfer",
"currency": "KES",
"country": "KE",
"accountHolderName": "Ada Okafor",
"institutionName": "Example Bank",
"maskedIdentifier": "•••• 6789",
"isDefault": true,
"providerLocked": false,
"createdAt": "2026-08-14T09:06:00.000Z"
}
],
"createdAt": "2026-08-14T09:05:00.000Z"
}
]{
"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."
}This endpoint takes no parameters and is not paginated. Every recipient and every one of their payment details comes back in one response. If you hold thousands of recipients, hold your own index and read individual recipients by id.
Error codes
| Status | code | Cause |
|---|---|---|
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.
Response
Successful response.
A 26-character ULID.
Required string length:
26Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Example:
"01K2Z3AB4C5D6E7F8G9HJKMNPQ"
Available options:
individual, business A 26-character ULID.
Required string length:
26Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Example:
"01K2Z3AB4C5D6E7F8G9HJKMNPQ"
Show child attributes
Show child attributes
Example:
"2026-08-14T09:00:00.000Z"