---
title: "Accounts & Wallets"
description: "When working with the Wallet API, it is important to understand the difference between an account and a wallet, as they are separate concepts that serve different roles."
stack: "Community Stack (open source) — version 0.21.0"
stack_version: "0.21.0"
stack_comparison: https://docs.walt.id/community-vs-enterprise.md
canonical_url: https://docs.walt.id/community-stack/wallet/accounts-wallets
generated: 2026-07-08
---
# Accounts & Wallets

## The Account vs. Wallet Distinction

When working with the Wallet API, it is important to understand the difference between an **account** and a **wallet**,
as they are separate concepts that serve different roles.

- An **account** is the authentication identity. When a user registers and logs in, a session token (or cookie) is
  issued that is tied to the account. This token proves who you are.
- A **wallet** is the operational container — it holds the user's keys, DIDs, and credentials. Every action such as
  receiving credentials, presenting credentials, or managing keys is scoped to a specific wallet, not just an account.

When a new account is registered, the Wallet API automatically provisions a default wallet for it, including a key and
DID (configurable via
the [registration defaults](https://docs.walt.id/community-stack/wallet/configurations/config-files/registration-defaults.md)). The API is
designed to support multiple wallets per account, so each wallet has its own unique ID.

Because a session token identifies your **account**, but all wallet operations require a **wallet ID**, you need to
retrieve the wallet ID before you can perform any wallet operations such as receiving or presenting credentials.

## Retrieve Wallet ID

**Option: CURL**

[API Reference](https://wallet.demo.walt.id/swagger/index.html#/Accounts/get_wallet_api_wallet_accounts_wallets)

```bash
curl -X 'GET' \
  'http://0.0.0.0:7001/wallet-api/wallet/accounts/wallets' \
  -H 'accept: application/json' \
  -H 'authorization: Bearer {token}'
```

**Header Parameters**

- `authorization`: _String_ - Bearer token obtained from the [login endpoint](https://docs.walt.id/community-stack/wallet/authentication/email-password-auth.md#login). Format: `Bearer {token}`.

**Example Response**

```json
{
  "account": "108753e3-5ab4-4096-8699-ad0653c79a09",
  "wallets": [
    {
      "id": "4d7ef7c6-a76b-409b-b042-68d15a484082",
      "name": "Wallet of Test",
      "createdOn": "2025-04-16T09:19:11.585Z",
      "addedOn": "2025-04-16T09:19:11.597Z",
      "permission": "ADMINISTRATE"
    }
  ]
}
```

**Response Fields**

- `account`: _String_ - The unique ID of the authenticated account.
- `wallets`: _Array_ - The list of wallets associated with this account. Each wallet object contains:
  - `id`: _String_ - The unique wallet ID. **This is the value required for all subsequent wallet operations.**
  - `name`: _String_ - A human-readable name for the wallet.
  - `createdOn`: _String_ - ISO 8601 timestamp of when the wallet was created.
  - `addedOn`: _String_ - ISO 8601 timestamp of when the wallet was added to this account.
  - `permission`: _String_ - The permission level of the authenticated account over this wallet (e.g. `ADMINISTRATE`).

**Note:**

Save the `id` value from the wallet you want to work with. It is required as a path parameter for all wallet
operations including credential exchange, key management, and DID management.
