> ## Documentation Index
> Fetch the complete documentation index at: https://docs.peerpesa.co/llms.txt
> Use this file to discover all available pages before exploring further.

# List asset balances and wallet addresses per network

> GET /wallet/assets lists every coin in your PeerPesa wallet with its default wallet, all deposit addresses across networks, memos, and the balance on each.

The asset balances endpoint lists every coin your PeerPesa account holds, such as USDC, together with the wallet addresses PeerPesa generated for it on each blockchain network and the balance held at each address. One coin can have several addresses, for example a Stellar address with a memo, a Solana address, and EVM (`0x`) addresses, because each network keeps its own balance.

## GET /wallet/assets

Returns all assets for the authenticated account, one entry per coin.

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.peerpesa.co/v1/wallet/assets \
    -H "Authorization: Bearer $ACCESS_TOKEN"
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch("https://api.peerpesa.co/v1/wallet/assets", {
    headers: { Authorization: `Bearer ${accessToken}` },
  });
  const { data: assets } = await res.json();
  ```
</CodeGroup>

### Example asset

The response returns a list of asset objects. One USDC asset:

```json Response expandable theme={null}
{
  "id": "3bb5afa7-947b-4de2-9876-40ec67d175ab",
  "token_name": "USDC",
  "symbol": "USDC",
  "label": "",
  "contract_address": null,
  "blockchain": "",
  "total_supply": "0.000000000000000000",
  "decimals": 0,
  "token_type": "Native",
  "status": "active",
  "deleted_at": null,
  "created_at": "2025-02-02T20:03:11.000Z",
  "updated_at": "2025-02-07T14:22:39.000Z",
  "wallet": {
    "id": "b11d77d5-760b-4281-8064-4d348aa0739b",
    "user_id": "b9ad5560-7d97-4dbf-8bb6-9a1e73b1c008",
    "label": "USDC Wallet",
    "memo": "",
    "address": "0x0f92Fd6158064cF73c74E95eeac187fc7d3791f8",
    "details": "",
    "wallet_key": "",
    "coin_id": "3bb5afa7-947b-4de2-9876-40ec67d175ab",
    "blockchain_network_id": "8cf1955c-ff62-4088-b753-97748628ea31",
    "account_type": "user",
    "status": "active",
    "is_default": 0,
    "deleted_at": null,
    "updated_at": null,
    "created_at": "2026-02-28T15:16:07.000Z",
    "balance": 0
  },
  "icon": "https://localhost/images/icons/usdc.png",
  "addressCollections": [
    {
      "id": "b11d77d5-760b-4281-8064-4d348aa0739b",
      "user_id": "b9ad5560-7d97-4dbf-8bb6-9a1e73b1c008",
      "label": "USDC Wallet",
      "memo": "",
      "address": "0x0f92Fd6158064cF73c74E95eeac187fc7d3791f8",
      "details": "",
      "wallet_key": "",
      "coin_id": "3bb5afa7-947b-4de2-9876-40ec67d175ab",
      "blockchain_network_id": "8cf1955c-ff62-4088-b753-97748628ea31",
      "account_type": "user",
      "status": "active",
      "is_default": 0,
      "deleted_at": null,
      "updated_at": null,
      "created_at": "2026-02-28T15:16:07.000Z",
      "balance": 0
    },
    {
      "id": "b6e1094d-f3a1-4661-8286-a8085de0da71",
      "user_id": "b9ad5560-7d97-4dbf-8bb6-9a1e73b1c008",
      "label": "USDC Wallet",
      "memo": "a8a45dcd8693471b",
      "address": "9jsCGGub4FV9AgWZ9xUyAJaMPb6W2GCswBJqnoqK41o4",
      "details": "",
      "wallet_key": "",
      "coin_id": "3bb5afa7-947b-4de2-9876-40ec67d175ab",
      "blockchain_network_id": "550e8400-e29b-41d4-a716-446655440000",
      "account_type": "user",
      "status": "active",
      "is_default": 0,
      "deleted_at": null,
      "updated_at": null,
      "created_at": "2026-02-28T15:16:04.000Z",
      "balance": 0
    },
    {
      "id": "f050485c-8156-4fd4-86a3-6c21b3af35b2",
      "user_id": "b9ad5560-7d97-4dbf-8bb6-9a1e73b1c008",
      "label": "USDC Wallet",
      "memo": "SHXDZD",
      "address": "GAKA4FLXAMBVVZOKM63VJZD63JOLCSZQAMQTMUCKFZ52OPD5ZIBXGTXG",
      "details": "",
      "wallet_key": "",
      "coin_id": "3bb5afa7-947b-4de2-9876-40ec67d175ab",
      "blockchain_network_id": "3bb5afa7-947b-4de2-9876-40ec67d1711b",
      "account_type": "user",
      "status": "active",
      "is_default": 0,
      "deleted_at": null,
      "updated_at": null,
      "created_at": "2026-02-28T15:15:55.000Z",
      "balance": 0
    },
    {
      "id": "9ac6e2d9-2834-4f58-8349-76ef736b4648",
      "user_id": "b9ad5560-7d97-4dbf-8bb6-9a1e73b1c008",
      "label": "USDC Wallet",
      "memo": "",
      "address": "0x965520F935C5453aDcfCA3dc64be89CeB935FcdC",
      "details": "",
      "wallet_key": "",
      "coin_id": "3bb5afa7-947b-4de2-9876-40ec67d175ab",
      "blockchain_network_id": "3bb5afa7-947b-4de2-9876-40ec67d1711a",
      "account_type": "user",
      "status": "active",
      "is_default": 0,
      "deleted_at": null,
      "updated_at": null,
      "created_at": "2025-12-04T15:53:39.000Z",
      "balance": 0
    },
    {
      "id": "c1f736af-b034-4765-b6db-b150674b820d",
      "user_id": "b9ad5560-7d97-4dbf-8bb6-9a1e73b1c008",
      "label": "USDC Wallet",
      "memo": "",
      "address": "0xF849Dce76c31ba36e36C809E76e5D8605BFdAB42",
      "details": "",
      "wallet_key": "",
      "coin_id": "3bb5afa7-947b-4de2-9876-40ec67d175ab",
      "blockchain_network_id": "3bb5afa7-947b-4de2-9876-40ec67d1711a",
      "account_type": "user",
      "status": "active",
      "is_default": 0,
      "deleted_at": null,
      "updated_at": null,
      "created_at": "2025-02-18T08:11:08.000Z",
      "balance": 0.003442
    }
  ]
}
```

<Note>
  `balance` is returned as a number, not a decimal string. To get the total held for a coin, add up `balance` across every entry in `addressCollections`. In the example, the USDC total is `0.003442`.
</Note>

<Warning>
  When a wallet has a `memo`, include it with every deposit to that address. Deposits to shared Stellar or Solana addresses without the correct memo cannot be credited to your account.
</Warning>

## Asset fields

<ResponseField name="id" type="string">
  Coin ID (UUID). Matches `coin_id` on each wallet.
</ResponseField>

<ResponseField name="token_name" type="string">
  Display name of the coin, for example `USDC`.
</ResponseField>

<ResponseField name="symbol" type="string">
  Ticker symbol, for example `USDC`.
</ResponseField>

<ResponseField name="label" type="string">
  Optional display label. Empty when not set.
</ResponseField>

<ResponseField name="contract_address" type="string | null">
  Token contract address, when the coin has a single contract. `null` for coins issued on several networks, where each network has its own contract.
</ResponseField>

<ResponseField name="blockchain" type="string">
  Blockchain name for single-network coins. Empty for multi-network coins such as USDC.
</ResponseField>

<ResponseField name="total_supply" type="string">
  Token supply as a decimal string. Informational only.
</ResponseField>

<ResponseField name="decimals" type="integer">
  Token decimal places, where set.
</ResponseField>

<ResponseField name="token_type" type="string">
  Token type, for example `Native`.
</ResponseField>

<ResponseField name="status" type="string">
  `active` or `inactive`. Inactive coins cannot be deposited, sent, or swapped.
</ResponseField>

<ResponseField name="icon" type="string">
  URL of the coin icon for display in your UI.
</ResponseField>

<ResponseField name="created_at" type="string">
  ISO 8601 timestamp when the coin was added.
</ResponseField>

<ResponseField name="updated_at" type="string">
  ISO 8601 timestamp of the last change to the coin.
</ResponseField>

<ResponseField name="deleted_at" type="string | null">
  Set when the coin has been removed. `null` for available coins.
</ResponseField>

<ResponseField name="wallet" type="object">
  The primary wallet for this coin. Same shape as an entry in `addressCollections`.
</ResponseField>

<ResponseField name="addressCollections" type="object[]">
  Every wallet address you hold for this coin, one or more per network.

  <Expandable title="wallet properties">
    <ResponseField name="id" type="string">
      Wallet ID (UUID).
    </ResponseField>

    <ResponseField name="user_id" type="string">
      ID of the account that owns the wallet.
    </ResponseField>

    <ResponseField name="label" type="string">
      Wallet label, for example `USDC Wallet`.
    </ResponseField>

    <ResponseField name="memo" type="string">
      Memo or destination tag to include with deposits. Empty when the address is not shared, such as `0x` addresses.
    </ResponseField>

    <ResponseField name="address" type="string">
      Deposit address on the wallet's network.
    </ResponseField>

    <ResponseField name="details" type="string">
      Extra wallet details. Usually empty.
    </ResponseField>

    <ResponseField name="wallet_key" type="string">
      Reserved. Always returned empty.
    </ResponseField>

    <ResponseField name="coin_id" type="string">
      ID of the coin this wallet holds.
    </ResponseField>

    <ResponseField name="blockchain_network_id" type="string">
      ID of the blockchain network the address belongs to.
    </ResponseField>

    <ResponseField name="account_type" type="string">
      Owner type, for example `user`.
    </ResponseField>

    <ResponseField name="status" type="string">
      `active` or `inactive`.
    </ResponseField>

    <ResponseField name="is_default" type="integer">
      `1` if this is the default wallet for the coin, otherwise `0`.
    </ResponseField>

    <ResponseField name="balance" type="number">
      Balance held at this address, in whole coin units.
    </ResponseField>

    <ResponseField name="created_at" type="string">
      ISO 8601 timestamp when the address was generated.
    </ResponseField>

    <ResponseField name="updated_at" type="string | null">
      ISO 8601 timestamp of the last update, or `null`.
    </ResponseField>

    <ResponseField name="deleted_at" type="string | null">
      Set when the wallet has been removed.
    </ResponseField>
  </Expandable>
</ResponseField>

## Reading balances in your app

```javascript Total balance per coin theme={null}
const res = await fetch("https://api.peerpesa.co/v1/wallet/assets", {
  headers: { Authorization: `Bearer ${accessToken}` },
});
const { data: assets } = await res.json();

const balances = assets
  .filter((asset) => asset.status === "active")
  .map((asset) => ({
    symbol: asset.symbol,
    icon: asset.icon,
    total: asset.addressCollections.reduce((sum, w) => sum + w.balance, 0),
    addresses: asset.addressCollections.map((w) => ({
      network_id: w.blockchain_network_id,
      address: w.address,
      memo: w.memo || null,
      balance: w.balance,
    })),
  }));
```

## Errors

| Code | Status | Cause |
| - | - | - |
| `unauthorized` | 401 | Token missing or expired |
| `rate_limited` | 429 | Too many requests. Retry after the `Retry-After` delay. |

See [Error Codes](/errors) for the full list.

<CardGroup cols={2}>
  <Card title="Deposit" icon="arrow-down-to-bracket" href="/api-reference/deposit-wallets">
    Generate a new deposit address on a network.
  </Card>

  <Card title="List Currencies" icon="coins" href="/api-reference/coins">
    See supported coins, networks, and fees.
  </Card>

  <Card title="Send" icon="paper-plane" href="/api-reference/send">
    Send crypto from your balance.
  </Card>

  <Card title="Swap" icon="arrows-rotate" href="/api-reference/swap">
    Move value between coins and networks.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.