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.
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
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
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
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
- Manage keys — generate, import, and list keys.
- Manage DIDs — create and import DIDs.
- Receive a credential into the wallet.
- Enable persistence so wallet data survives restarts.
