Skip to content

List wallets

The wallets.list operation: GET /api/v1/wallets in the REST API and the wallets_list tool in the MCP server.

GET/api/v1/wallets

Lists the brand's wallets in the mode of the request, newest first, with their balances (without the upcoming expiries: get a wallet for those).

  • customerId: one customer's wallets (one per currency);
  • currency, status: only wallets in this currency or with this status.

Paginate with limit (1–100, default 10) and starting_after (the next_cursor of the previous page).

At a glance

  • REST: GET /api/v1/wallets
  • MCP tool: wallets_list
  • Operation ID: wallets.list
  • Scope: Brand
  • Permission: wallets:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Pagination: limit (at most 100) and starting_after
  • Authentication: API key with the wallets:read scope
  • Since: M6

Request

Query parameters

FieldTypeRequiredDescription
limitinteger (1 to 100)No
starting_afterwal_… IDNo
customerIdcus_… IDNoOnly this customer's wallets (spec: ?customer=).
currencystringNoOnly wallets in this currency.
statusone of active, frozen, closedNoOnly wallets with this status.

Response

200 OK with a JSON object, a page of the list (newest first):

FieldTypeDescription
object"list"
dataarray of object
data[].idwal_… ID
data[].object"wallet"
data[].brandIdbrd_… ID
data[].livemodeboolean
data[].customerIdcus_… ID
data[].currencystring
data[].statusone of active, frozen, closedactive, frozen (no new reservations or leases) or closed (retired; reopened by a purchase).
data[].statusReasonstring or nullWhy the wallet is frozen or closed.
data[].statusChangedAtdate-time or null
data[].availablemoneySpendable purchased, subscription and adjustment credits (not reserved). Expired credits stay here until the hourly expiry job takes them out.
data[].promomoneySpendable promo credits (spent first; never refundable).
data[].reservedmoneyHeld by open reservations and leases.
data[].balancemoneyAll unspent credits: available + promo + reserved.
data[].lowBalanceThresholdmoney or null
data[].lowBalancebooleanThe balance is below lowBalanceThreshold.
data[].autoReloadobject or null
data[].createdAtdate-time
data[].updatedAtdate-time
has_moreboolean
next_cursorstring or null

Examples

A customer's wallets

HTTP
GET /api/v1/wallets?customerId=cus_01m4ty3c2b5qx7mhd9k8w6s0aa
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "wal_01m4ty7w2a5qx7mhd9k8w6s0b1",
      "object": "wallet",
      "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
      "livemode": false,
      "customerId": "cus_01m4ty3c2b5qx7mhd9k8w6s0aa",
      "currency": "EUR",
      "status": "active",
      "statusReason": null,
      "statusChangedAt": null,
      "available": {
        "amount": "77000000",
        "currency": "EUR"
      },
      "promo": {
        "amount": "5000000",
        "currency": "EUR"
      },
      "reserved": {
        "amount": "3000000",
        "currency": "EUR"
      },
      "balance": {
        "amount": "85000000",
        "currency": "EUR"
      },
      "lowBalanceThreshold": {
        "amount": "10000000",
        "currency": "EUR"
      },
      "lowBalance": false,
      "autoReload": null,
      "createdAt": "2026-10-14T09:00:00.000Z",
      "updatedAt": "2026-10-16T10:15:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A filter or pagination value is invalid.Fix the fields listed in details.issues and send the request again.
scope_required400The request names no brand (an org or entity key without Ownrecord-Brand).Call the operation with credentials or a target at its level: an organization, a legal entity, a brand or the platform (details.required_scope).
permission_denied403You can't read this brand's wallets (wallets:read).Ask an organization owner or admin for a role or scope that allows this action.
livemode_not_allowed403You have no live-mode access, so you can't use live wallets.Use test mode, or credentials for the target's mode. Developers need live access granted by an organization owner or admin.

It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, resource_not_found, dry_run_not_supported, rate_limited, internal_error.