Wallets and Balances

Read the corporation's wallets and the token balances held on each.

Before You Start

Read the following guides before proceeding:

GuideWhy
Getting StartedPlatform overview and setup
Api BasicsRequired headers and request configuration
AuthenticationHow to obtain the corporation token
Wallet DeploymentWhere the primary wallet comes from

Overview

A corporation holds one or more wallets. The primary wallet is the corporation wallet itself — the
address created on-chain and recorded as corporation_address. It funds every operation: card issuance
fees, bank transfers, corridor transfers and FX are all debited from it.

Additional wallets can be registered as global wallets to receive deposits from other chains.


Read Wallets and Balances

GET /api/v1/wallets

Requires a corporation token. No permission is declared.

Response:

{
  "data": [
    {
      "wallet_address": "0xA7E41d5680dE394EaA2ed417169DFf56840Fb3EE",
      "wallet_name": "Main Wallet",
      "wallet_status": "Confirmed",
      "wallet_type": "Primary",
      "balances": [
        {
          "token_symbol": "WUSD",
          "token_address": "0x0774164DC20524Bb239b39D1DC42573C3E4C6976",
          "balance": 1250.75,
          "reference_balance": 1250.75,
          "reference_currency": "USD"
        },
        {
          "token_symbol": "WEUR",
          "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2",
          "balance": 400.5,
          "reference_balance": 468.28,
          "reference_currency": "USD"
        }
      ]
    }
  ]
}
FieldDescription
wallet_addressThe wallet's address
wallet_nameDisplay name. Main Wallet for the primary wallet unless renamed
wallet_statusUnknown, Confirmed or Rejected — see below
wallet_typePrimary, Secondary or Global
balances[]One entry per token held. Empty when the wallet holds nothing
balances[].token_symbolToken symbol
balances[].token_addressToken contract address
balances[].balanceBalance in the token's own units
balances[].reference_balanceThe same balance converted to the reference currency
balances[].reference_currencyReference currency. Always USD on this endpoint

The schema documents reference_currency as determined by the corporation's registration country,
but this endpoint converts every balance against USD, whatever the corporation's country. Do
not present reference_balance as a local-currency figure.

Wallet Status

StatusDescription
ConfirmedThe wallet is a valid Account Abstraction wallet with the required modules and policy
RejectedThe wallet configuration is invalid or incomplete
UnknownThe wallet has not been verified yet. A newly registered corporation and every global wallet start here

Wait for the Primary wallet to read Confirmed before calling any funded flow. It is created
asynchronously after registration and starts at Unknown; Confirmed is what says the platform has
verified its modules and policy. Poll this endpoint after
Registering a Corporation.

Wallet Type

TypeDescription
PrimaryThe corporation wallet. Funds every debit the platform performs
SecondaryAn additional wallet registered to the corporation
GlobalA wallet registered to receive cross-chain deposits

A wallet whose balance read fails returns an empty balances array rather than an error. The call
succeeds and that wallet simply appears to hold nothing. Do not treat an empty balances array as
proof of a zero balance for a wallet you know is funded — re-read before acting on it.

Code

const response = await fetch(`${baseUrl}/api/v1/wallets`, {
  headers: { 'Authorization': `Bearer ${corporationToken}` }
});
const { data: wallets } = await response.json();
response = requests.get(
    f"{base_url}/api/v1/wallets",
    headers={"Authorization": f"Bearer {corporation_token}"},
)
wallets = response.json()["data"]
req, _ := http.NewRequest("GET", baseURL+"/api/v1/wallets", nil)
req.Header.Set("Authorization", "Bearer "+corporationToken)

resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()

var walletsResp struct {
    Data []WalletResponse `json:"data"`
}
json.NewDecoder(resp.Body).Decode(&walletsResp)

Unified Tokens

A corporation's balance is not held in USDC or EURC directly. When a supported stablecoin arrives, the
platform mints an equivalent amount of a unified tokenWUSD for USD value, WEUR for EUR — and
the underlying stablecoin is held in reserve. Balances, card spending, transfers and settlements all
operate on the unified token.

Unified tokenRegular token
ExamplesWUSD, WEURUSDC, USDT, EURC
token_typeSyntheticRegular
base_token_addressPresent — the ERC-20 backing itAbsent
Where it appearsBalances, card spending, most transfersOn-chain movement in and out of the platform

Both are listed by GET /api/v1/config/tokens — see
Token Types.

Why It Matters

The distinction is invisible until an operation demands one family specifically:

OperationAccepts
Card issuance and spendingEither
Push-to-card transferUnified tokens directly — no unwrap needed
FXRegular tokens only. A corporation funding a swap from WUSD must unwrap and send the underlying token in the same operation
On-chain transfer out of the platformRegular tokens — the unified token is unwrapped first

Wrapping happens automatically on deposit. Unwrapping is an on-chain operation your integration
performs; it appears in the activity feed as SyntheticUnwrap, and the corresponding mint appears as
SyntheticWrap — see Activity History.


Balance Changes

Balance changes are delivered to POST {your_webhook_base_url}/v2/webhooks/balances, keyed by
wallet_address. Resolve the corporation by matching the address against this endpoint's response.

See Webhooks.


Funding the Corporation

Funds arrive at the corporation wallet in four ways:

RouteGuide
An on-chain transfer to corporation_address
A fiat deposit into a corporate bank accountBank Accounts
A cross-chain deposit to a global walletGlobal Wallets
An FX swap into a different assetFX

The Corporate API has no crypto withdrawal endpoint. Outbound crypto movement is performed on-chain from
the corporation wallet; pending oracle-executed withdrawals are listed by
GET /api/v1/withdrawal/requests — see Withdrawal Requests.


Error Handling

{
  "error_reason": "ErrorGeneral",
  "error_description": "Failed to read corporation wallets",
  "error_category": {
    "category": "CategoryInternalFailure",
    "http_status_code": 500
  }
}

Server Errors (500)

Error ReasonDescriptionResolution
ErrorGeneralFailed to get corporation from contextThe corporation token is malformed — log in again
ErrorGeneralFailed to read corporation walletsThe wallet list could not be read. Retry
ErrorGeneralFailed to read tokensThe token catalogue was unavailable. Retry
ErrorGeneralFailed to read ratesRates were unavailable — the call fails rather than returning balances without reference_balance. Retry

Did this page help you?