---
title: "Managing Wallets"
description: "Create, inspect, and delete wallets in the Wallet API v2."
stack: "Community Stack (open source) — version 1.1.1"
stack_version: "1.1.1"
stack_comparison: https://docs.walt.id/community-vs-enterprise.md
canonical_url: https://docs.walt.id/community-stack/wallet2/wallets
generated: 2026-10-01
---
# Managing Wallets

A **wallet** in the Wallet API v2 is a container for keys, credentials, and DIDs. This page covers creating wallets, inspecting and deleting them, and store-less wallets for isolated flows.

**Note:**

This page assumes the Wallet API v2 is already running. If it isn't, start with [Setup](https://docs.walt.id/community-stack/wallet2/setup.md) first.

**Note:**

**Local Development:** the API is available at `http://localhost:7006` by default, whether Wallet API v2 runs standalone or via the Docker Compose quick start.

---

## Create a Wallet

The simplest wallet uses default, auto-created stores for data persistence — one key store, one credential store, and one DID store, created automatically.

**Option: CURL**

**Endpoint:** `POST /wallet` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl -X POST http://localhost:7006/wallet \
  -H 'Content-Type: application/json' \
  -d '{}'
```

**Body Parameters**

All fields are optional. An empty body creates a wallet with default, auto-created stores.

- **noDidStore**: _Boolean_ (optional) - Create the wallet without a DID store. Only required if you want to receive, manage and share [W3C VC](https://docs.walt.id/concepts/digital-credentials/verifiable-credentials-w3c.md), for [SD-JWT VC](https://docs.walt.id/concepts/digital-credentials/sd-jwt-vc.md) and [mdoc](https://docs.walt.id/concepts/digital-credentials/mdoc-mdl-iso.md) based credentials this is not needed. Defaults to `false`. 
- **keyStoreIds**: _String[]_ (optional) - Existing named key stores to attach to the wallet. Each store ID must already exist.
- **credentialStoreIds**: _String[]_ (optional) - Existing named credential stores to attach to the wallet. Each store ID must already exist.
- **didStoreId**: _String_ (optional) - Existing named DID store to attach to the wallet. The store ID must already exist.
- **staticKey**: _Object_ (optional) - A serialized key for a [store-less wallet](#store-less-wallets), used instead of a key store.
- **staticDid**: _String_ (optional) - A DID for a store-less wallet.

---

##### Example Response

```json
{
  "walletId": "550e8400-e29b-41d4-a716-446655440000"
}
```

**Response Fields**

- **walletId**: _String_ - The new wallet's ID, used in every wallet-scoped call.

**Error:**

Stores, like key stores or DID stores, are attached at creation time only — **you cannot add or remove stores from a wallet after it is created.** Decide the store layout up front.

---

## Inspect and Delete Wallets

### List Wallets

**Option: CURL**

**Endpoint:** `GET /wallet` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl http://localhost:7006/wallet
```

---

##### Example Response

```json
["550e8400-e29b-41d4-a716-446655440000"]
```

When [authentication](https://docs.walt.id/community-stack/wallet2/configurations/config-files/auth.md) is enabled, this returns only the wallets owned by the authenticated account.

### Get Wallet Info

**Option: CURL**

**Endpoint:** `GET /wallet/{walletId}` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl http://localhost:7006/wallet/{walletId}
```

**Path Parameters**

- **walletId**: _String_ (required) - The wallet to inspect.

---

##### Example Response

```json
{
  "walletId": "550e8400-e29b-41d4-a716-446655440000",
  "keyStoreCount": 1,
  "credentialStoreCount": 1,
  "hasDidStore": true,
  "hasStaticKey": false,
  "hasStaticDid": false,
  "keyStoreIds": ["550e8400-e29b-41d4-a716-446655440000-keys"],
  "credentialStoreIds": ["550e8400-e29b-41d4-a716-446655440000-credentials"],
  "didStoreId": "550e8400-e29b-41d4-a716-446655440000-dids",
  "defaultKeyId": "UneoCeKrx7t0SBINBZQOaSCCzvhgpK8tRS3NEG4pCfU",
  "defaultDidId": "did:key:z6Mkfriq1MqLBoPWecGoDLjguo1sB9brj6wT3qZ5BxkKpuP6"
}
```

**Response Fields**

- **walletId**: _String_ - The wallet ID.
- **keyStoreCount** / **credentialStoreCount**: _Number_ - How many stores of each type are attached.
- **hasDidStore**: _Boolean_ - Whether a DID store is attached.
- **hasStaticKey** / **hasStaticDid**: _Boolean_ - Whether the wallet uses a static key/DID (see [store-less wallets](#store-less-wallets)).
- **keyStoreIds** / **credentialStoreIds**: _String[]_ - Named key and credential store IDs attached to the wallet.
- **didStoreId**: _String_ (optional) - Named DID store ID attached to the wallet.
- **defaultKeyId**: _String_ (optional) - Key the wallet uses by default when `keyId` is omitted.
- **defaultDidId**: _String_ (optional) - DID the wallet uses by default when `did` is omitted.

### Delete a Wallet

**Option: CURL**

**Endpoint:** `DELETE /wallet/{walletId}` | [API Reference](https://docs.walt.id/community-stack/wallet2/full-api-reference.md)

##### Example Request

```bash
curl -X DELETE http://localhost:7006/wallet/{walletId}
```

**Path Parameters**

- **walletId**: _String_ (required) - The wallet to delete.

---

##### Example Response

`204 No Content` on success.

---

## Store-less Wallets

For isolated, one-off flows — signing a single presentation, or receiving a credential with externally managed key material — you can create a wallet with **no key or DID store**, backed by a static key and (optionally) a static DID:

```bash
curl -X POST http://localhost:7006/wallet \
  -H 'Content-Type: application/json' \
  -d '{
    "staticKey": { "type": "jwk", "jwk": { "kty": "OKP", "crv": "Ed25519", "x": "...", "d": "..." } },
    "staticDid": "did:key:z6Mkfriq1MqLBoPWecGoDLjguo1sB9brj6wT3qZ5BxkKpuP6",
    "noDidStore": true
  }'
```

The `staticKey` becomes the wallet's default key — it appears in the wallet's key list and is used for signing — and `staticDid` becomes its default DID, so credential [receiving](https://docs.walt.id/community-stack/wallet2/credential-receiving/overview.md) and [presenting](https://docs.walt.id/community-stack/wallet2/credential-presenting/overview.md) work without a key or DID store. You can't add further keys or DIDs (as there are no key or DID stores to manage/persist them), but a **credential store is still created automatically**, so received credentials are stored and can be listed as usual.

---

## Next Steps

- [Manage keys](https://docs.walt.id/community-stack/wallet2/key-management/overview.md) — generate, import, and list keys.
- [Manage DIDs](https://docs.walt.id/community-stack/wallet2/did-management.md) — create and import DIDs.
- [Receive a credential](https://docs.walt.id/community-stack/wallet2/credential-receiving/sd-jwt-vc.md) into the wallet.
- [Enable persistence](https://docs.walt.id/community-stack/wallet2/configurations/config-files/persistence.md) so wallet data survives restarts.
