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.

This page assumes the Wallet API v2 is already running. If it isn't, start with Setup first.

The examples use http://localhost:7005 as the base URL.


Create a Wallet

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

CURL

Endpoint: POST /wallet | API Reference

Example Request
curl -X POST http://localhost:7005/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 credentials, for SD-JWT VC and mdoc based credentials this is not needed. Defaults to false.
  • staticKey: Object (optional) - A serialized key for a store-less wallet, used instead of a key store.
  • staticDid: String (optional) - A DID for a store-less wallet.

Example Response
{
  "walletId": "550e8400-e29b-41d4-a716-446655440000"
}

Response Fields

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

Stores, like key store or did store 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

CURL

Endpoint: GET /wallet | API Reference

Example Request
curl http://localhost:7005/wallet

Example Response
["550e8400-e29b-41d4-a716-446655440000"]

When authentication is enabled, this returns only the wallets owned by the authenticated account.

Get Wallet Info

CURL

Endpoint: GET /wallet/{walletId} | API Reference

Example Request
curl http://localhost:7005/wallet/{walletId}

Path Parameters

  • walletId: String (required) - The wallet to inspect.

Example Response
{
  "walletId": "550e8400-e29b-41d4-a716-446655440000",
  "keyStoreCount": 1,
  "credentialStoreCount": 1,
  "hasDidStore": true,
  "hasStaticKey": false,
  "hasStaticDid": false
}

Response Fields

  • 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).

Delete a Wallet

CURL

Endpoint: DELETE /wallet/{walletId} | API Reference

Example Request
curl -X DELETE http://localhost:7005/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:

curl -X POST http://localhost:7005/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 and presenting 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

Last updated on July 13, 2026