Skip to content

List your wallets and balances

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

GET/api/v1/portal/me/wallets

Lists the signed-in customer's prepaid credit wallets with this brand, one per currency, newest first: the balance, what is available, promotional and held for usage in progress, the next credits to expire, and the auto-reload settings. Amounts are integer micros. Customer portal only (portal:read).

At a glance

  • REST: GET /api/v1/portal/me/wallets
  • MCP tool: portal_wallets_list
  • Operation ID: portal.wallets.list
  • Scope: Brand
  • Permission: portal: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: A customer signed in to the customer portal (API keys can't call it)
  • Since: M9

Request

Query parameters

FieldTypeRequiredDescription
limitinteger (1 to 100)NoPage size, 1 to 100 (default 20).
starting_afterstringNoThe next_cursor of the previous page.

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"portal_wallet"
data[].currencystring
data[].statusone of active, frozen, closed
data[].balancemoneyAll your credits: available, promotional and held.
data[].availablemoneyPurchased and included credits you can use.
data[].promomoneyPromotional credits (used first).
data[].reservedmoneyCredits held for usage in progress.
data[].upcomingExpiriesarray of object
data[].upcomingExpiries[].amountmoney
data[].upcomingExpiries[].expiresAtdate-time
data[].autoReloadobject or null
data[].createdAtdate-time
has_moreboolean
next_cursorstring or null

Examples

A euro wallet with promotional credits

HTTP
GET /api/v1/portal/me/wallets
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "wal_01m4tx5nj8emwbyf7y9vcf48c7",
      "object": "portal_wallet",
      "currency": "EUR",
      "status": "active",
      "balance": {
        "amount": "32500000",
        "currency": "EUR"
      },
      "available": {
        "amount": "25000000",
        "currency": "EUR"
      },
      "promo": {
        "amount": "5000000",
        "currency": "EUR"
      },
      "reserved": {
        "amount": "2500000",
        "currency": "EUR"
      },
      "upcomingExpiries": [
        {
          "amount": {
            "amount": "5000000",
            "currency": "EUR"
          },
          "expiresAt": "2026-12-31T23:00:00.000Z"
        }
      ],
      "autoReload": null,
      "createdAt": "2026-09-20T09:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

CodeHTTP statusWhenWhat to do
livemode_not_allowed403The portal session is in the other mode than the request.Use test mode, or credentials for the target's mode. Developers need live access granted by an organization owner or admin.
permission_denied403The caller isn't a customer signed in to this brand's portal (operators and API keys use the subscription and wallet operations).Ask an organization owner or admin for a role or scope that allows this action.

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