Skip to content

Wallet Management API

Programmatically manage your linked wallet — view details, add or remove members, and update settings via an admin API key.

Admin Access Required

These endpoints require an API key with admin role on the linked wallet. Admin API keys can manage members but cannot manage other admins or the wallet owner. Only the wallet owner can promote/demote admins from the dashboard.

Authentication

All wallet management endpoints require:

  1. A secret key (sk_live_* or sk_test_*) passed via Authorization: Bearer sk_live_...
  2. The API key must have the transfers permission
  3. A programmable-debit wallet must be linked to the API key
  4. The API key must have admin role on the wallet (configured from the Members tab in the dashboard)

See Authentication for details.


Get Wallet

Retrieve the linked wallet's details including balance, members, settings, and API key members.

GET /v1/checkout/wallet

Authentication

Secret key required. transfers permission required. Admin role required.

Example Request

bash
curl https://api.zevpaycheckout.com/v1/checkout/wallet \
  -H "Authorization: Bearer sk_live_your_secret_key"
javascript
const response = await fetch('https://api.zevpaycheckout.com/v1/checkout/wallet', {
  headers: {
    'Authorization': 'Bearer sk_live_your_secret_key',
  },
});
const { data } = await response.json();
console.log(data.name, data.balance);
python
import requests

response = requests.get(
    'https://api.zevpaycheckout.com/v1/checkout/wallet',
    headers={'Authorization': 'Bearer sk_live_your_secret_key'},
)
data = response.json()['data']
print(data['name'], data['balance'])

Response

json
{
  "success": true,
  "data": {
    "public_id": "wlt_abc123",
    "name": "Operations Wallet",
    "description": "Main operations wallet",
    "pay_id": "@ops.wallet",
    "owner_type": "business",
    "balance": {
      "available": 5000000,
      "currency": "NGN"
    },
    "settings": {
      "daily_limit": "5000.00",
      "monthly_limit": "155000.00",
      "single_limit": null,
      "enable_notification": true,
      "hide_members_transaction": false,
      "allow_programmable_debit": true
    },
    "members": [
      {
        "pay_id": "@john.personal",
        "display_name": "John Doe",
        "entity_type": "personal",
        "role": "owner",
        "joined_at": "2025-01-15T10:00:00.000Z"
      },
      {
        "pay_id": "@jane.personal",
        "display_name": "Jane Smith",
        "entity_type": "personal",
        "role": "member",
        "joined_at": "2025-02-01T10:00:00.000Z"
      }
    ],
    "api_key_members": [
      {
        "api_key_id": "uuid-here",
        "label": "Production Key",
        "key_prefix": "sk_live_ab",
        "role": "admin",
        "linked_at": "2025-03-01T10:00:00.000Z"
      }
    ],
    "member_count": 4,
    "created_at": "2025-01-15T10:00:00.000Z"
  }
}

Response Fields

FieldTypeDescription
public_idstringWallet public identifier
namestringWallet name
descriptionstringWallet description
pay_idstringWallet's PayID
owner_typestringbusiness or personal
balance.availablenumberAvailable balance in kobo (divide by 100 for naira)
balance.currencystringCurrency code (e.g. NGN)
settingsobjectWallet-level settings
membersarrayList of human members with their roles
api_key_membersarrayList of API key members with their roles
member_countnumberTotal member count (people + API keys)
created_atstringISO 8601 creation timestamp

Update Wallet Settings

Update the linked wallet's settings. Admin API keys can update name, description, notification, and transaction visibility settings.

PATCH /v1/checkout/wallet

Authentication

Secret key required. transfers permission required. Admin role required.

Request Body

ParameterTypeRequiredDescription
namestringNoWallet name (max 100 characters)
descriptionstringNoWallet description
enable_notificationbooleanNoEnable/disable transaction notifications
hide_members_transactionbooleanNoHide transaction details from members

Example Request

bash
curl -X PATCH https://api.zevpaycheckout.com/v1/checkout/wallet \
  -H "Authorization: Bearer sk_live_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Wallet Name",
    "hide_members_transaction": true
  }'
javascript
const response = await fetch('https://api.zevpaycheckout.com/v1/checkout/wallet', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer sk_live_your_secret_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Updated Wallet Name',
    hide_members_transaction: true,
  }),
});
const { data } = await response.json();
python
import requests

response = requests.patch(
    'https://api.zevpaycheckout.com/v1/checkout/wallet',
    headers={'Authorization': 'Bearer sk_live_your_secret_key'},
    json={
        'name': 'Updated Wallet Name',
        'hide_members_transaction': True,
    },
)

Response

json
{
  "success": true,
  "data": {
    "success": true,
    "message": "Wallet settings updated"
  }
}

List Members

List all members of the linked wallet, including both human members and API key members with their settings.

GET /v1/checkout/wallet/members

Authentication

Secret key required. transfers permission required. Admin role required.

Example Request

bash
curl https://api.zevpaycheckout.com/v1/checkout/wallet/members \
  -H "Authorization: Bearer sk_live_your_secret_key"
javascript
const response = await fetch('https://api.zevpaycheckout.com/v1/checkout/wallet/members', {
  headers: {
    'Authorization': 'Bearer sk_live_your_secret_key',
  },
});
const { data } = await response.json();
console.log(data.members, data.api_key_members);
python
import requests

response = requests.get(
    'https://api.zevpaycheckout.com/v1/checkout/wallet/members',
    headers={'Authorization': 'Bearer sk_live_your_secret_key'},
)
data = response.json()['data']
print(data['members'])

Response

json
{
  "success": true,
  "data": {
    "members": [
      {
        "pay_id": "@john.personal",
        "display_name": "John Doe",
        "entity_type": "personal",
        "role": "owner",
        "is_active": true,
        "joined_at": "2025-01-15T10:00:00.000Z",
        "settings": {
          "enable_notification": true,
          "hide_wallet_balance": false,
          "has_daily_limit": false,
          "daily_limit": null,
          "has_monthly_limit": false,
          "monthly_limit": null,
          "has_single_limit": false,
          "single_limit": null
        }
      }
    ],
    "api_key_members": [
      {
        "api_key_id": "uuid-here",
        "label": "Production Key",
        "key_prefix": "sk_live_ab",
        "role": "admin",
        "is_active": true,
        "linked_at": "2025-03-01T10:00:00.000Z",
        "settings": {
          "hide_balance": false,
          "has_daily_limit": true,
          "daily_limit": "1000000.00",
          "has_monthly_limit": false,
          "monthly_limit": null,
          "has_single_limit": false,
          "single_limit": null
        }
      }
    ],
    "total": 4
  }
}

Add Member

Add a new member to the wallet by their PayID. The member will be added with the member role.

POST /v1/checkout/wallet/members

Authentication

Secret key required. transfers permission required. Admin role required.

Request Body

ParameterTypeRequiredDescription
pay_idstringYesThe PayID of the entity to add (e.g. john.personal)

INFO

Admin API keys can only add members. They cannot promote members to admin — only the wallet owner can do that from the dashboard.

Example Request

bash
curl -X POST https://api.zevpaycheckout.com/v1/checkout/wallet/members \
  -H "Authorization: Bearer sk_live_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{ "pay_id": "jane.personal" }'
javascript
const response = await fetch('https://api.zevpaycheckout.com/v1/checkout/wallet/members', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk_live_your_secret_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ pay_id: 'jane.personal' }),
});
const { data } = await response.json();
python
import requests

response = requests.post(
    'https://api.zevpaycheckout.com/v1/checkout/wallet/members',
    headers={'Authorization': 'Bearer sk_live_your_secret_key'},
    json={'pay_id': 'jane.personal'},
)

Response

json
{
  "success": true,
  "data": {
    "success": true,
    "message": "Member added to wallet"
  }
}

Remove Member

Remove a member from the wallet by their PayID.

DELETE /v1/checkout/wallet/members/:payId

Authentication

Secret key required. transfers permission required. Admin role required.

Path Parameters

ParameterTypeDescription
payIdstringThe PayID of the member to remove (e.g. jane.personal)

Restrictions

  • Admin API keys cannot remove the wallet owner
  • Admin API keys cannot remove other admins — only the wallet owner can
  • Admin API keys can only remove members with the member role

Example Request

bash
curl -X DELETE https://api.zevpaycheckout.com/v1/checkout/wallet/members/jane.personal \
  -H "Authorization: Bearer sk_live_your_secret_key"
javascript
const response = await fetch('https://api.zevpaycheckout.com/v1/checkout/wallet/members/jane.personal', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer sk_live_your_secret_key',
  },
});
const { data } = await response.json();
python
import requests

response = requests.delete(
    'https://api.zevpaycheckout.com/v1/checkout/wallet/members/jane.personal',
    headers={'Authorization': 'Bearer sk_live_your_secret_key'},
)

Response

json
{
  "success": true,
  "data": {
    "success": true,
    "message": "Member removed from wallet"
  }
}

Update Member Settings

Update a member's individual settings including notification preferences, balance visibility, and spending limits.

PATCH /v1/checkout/wallet/members/:payId

Authentication

Secret key required. transfers permission required. Admin role required.

Path Parameters

ParameterTypeDescription
payIdstringThe PayID of the member to update (e.g. jane.personal)

Request Body

ParameterTypeRequiredDescription
enable_notificationbooleanNoEnable/disable notifications for this member
hide_wallet_balancebooleanNoHide the wallet balance from this member
has_daily_limitbooleanNoEnable daily spending limit
daily_limitnumberNoDaily spending limit in naira (required when has_daily_limit is true)
has_monthly_limitbooleanNoEnable monthly spending limit
monthly_limitnumberNoMonthly spending limit in naira
has_single_limitbooleanNoEnable per-transaction spending limit
single_limitnumberNoPer-transaction spending limit in naira

Restrictions

  • Admin API keys can only update settings for members with the member role
  • Cannot update the wallet owner's settings
  • Cannot update other admins' settings
  • Role changes are not available via the API — only the wallet owner can change roles from the dashboard

Example Request

bash
curl -X PATCH https://api.zevpaycheckout.com/v1/checkout/wallet/members/jane.personal \
  -H "Authorization: Bearer sk_live_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{
    "hide_wallet_balance": true,
    "has_daily_limit": true,
    "daily_limit": 50000
  }'
javascript
const response = await fetch('https://api.zevpaycheckout.com/v1/checkout/wallet/members/jane.personal', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer sk_live_your_secret_key',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    hide_wallet_balance: true,
    has_daily_limit: true,
    daily_limit: 50000,
  }),
});
const { data } = await response.json();
python
import requests

response = requests.patch(
    'https://api.zevpaycheckout.com/v1/checkout/wallet/members/jane.personal',
    headers={'Authorization': 'Bearer sk_live_your_secret_key'},
    json={
        'hide_wallet_balance': True,
        'has_daily_limit': True,
        'daily_limit': 50000,
    },
)

Response

json
{
  "success": true,
  "data": {
    "success": true,
    "message": "Member settings updated"
  }
}

Error Codes

StatusCodeDescription
401UnauthorizedMissing or invalid API key
403ForbiddenNot a secret key, no wallet linked, programmable debit disabled, or insufficient permissions
403ForbiddenAPI key is not an admin on the wallet
403ForbiddenCannot manage admins or the wallet owner (admin can only manage members)
400Bad RequestValidation error, member already exists, or cannot remove owner
404Not FoundMember not found in wallet, or PayID does not exist

Permission Hierarchy

RoleCan manage membersCan manage adminsCan manage ownerCan change roles
Owner (dashboard only)YesYesSelf onlyYes
Admin (API or dashboard)YesNoNoNo
MemberNoNoNoNo

Try it — Get Wallet

API Playground
GEThttps://api.zevpaycheckout.com/v1/checkout/wallet

Try it — List Members

API Playground
GEThttps://api.zevpaycheckout.com/v1/checkout/wallet/members

Try it — Add Member

API Playground
POSThttps://api.zevpaycheckout.com/v1/checkout/wallet/members

ZevPay Checkout Developer Documentation