Skip to content

Wallet

The Wallet endpoints allow you to create and manage encrypted wallets for secure credential storage with Ed25519 keypair management.

Creates a new encrypted wallet with an Ed25519 keypair and DID.

POST /v1/wallets

Requires BearerAuth or ApiKeyAuth.

FieldTypeRequiredDescription
namestringYesName for the wallet
passwordstringYesPassword for encrypting the wallet
descriptionstringNoOptional description
Terminal window
curl -X POST "https://api.veriglob.com/v1/wallets" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"name": "My Identity Wallet",
"password": "secure-wallet-password",
"description": "Personal credentials wallet"
}'

201 Created

{
"status": "success",
"message": "Wallet created successfully",
"data": {
"wallet_id": "wallet_abc123def456",
"name": "My Identity Wallet",
"did": "did:key:z6MkhsiKBzbNixeXD7mzEzEiuRDFJEKpofi62adE1ZpauNeh",
"public_key": "base64-encoded-public-key",
"created_at": "2024-01-15T10:30:00Z"
}
}
StatusDescription
400Invalid request body or missing required fields
401Invalid or missing API key
429Rate limit exceeded
500Internal server error

Decrypts and opens an existing wallet, returning its contents.

POST /v1/wallets/open

Requires BearerAuth or ApiKeyAuth.

FieldTypeRequiredDescription
wallet_idstringYesThe wallet ID to open
passwordstringYesThe wallet password
Terminal window
curl -X POST "https://api.veriglob.com/v1/wallets/open" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"wallet_id": "wallet_abc123def456",
"password": "secure-wallet-password"
}'

200 OK

{
"status": "success",
"message": "Wallet opened successfully",
"data": {
"wallet_id": "wallet_abc123def456",
"name": "My Identity Wallet",
"did": "did:key:z6MkhsiKBzbNixeXD7mzEzEiuRDFJEKpofi62adE1ZpauNeh",
"public_key": "base64-encoded-public-key",
"private_key": "base64-encoded-private-key",
"credentials": [
{
"credential_id": "urn:uuid:3978344f-8596-4c3a-a978-8fcaba3903c5",
"credential": "v4.public.eyJpc3MiOi...",
"credential_type": "EmploymentCredential",
"issuer": "did:key:z6MkissuerDID...",
"stored_at": "2024-01-20T14:00:00Z"
}
],
"created_at": "2024-01-15T10:30:00Z"
}
}
StatusDescription
400Invalid request body or missing fields
401Invalid password or API key
404Wallet not found
429Rate limit exceeded

Stores a credential in an open wallet.

POST /v1/wallets/{wallet_id}/credentials

Requires BearerAuth or ApiKeyAuth.

ParameterTypeRequiredDescription
wallet_idstringYesThe wallet ID
FieldTypeRequiredDescription
passwordstringYesThe wallet password
credentialstringYesThe PASETO v4 credential token
metadataobjectNoOptional metadata for the credential
Terminal window
curl -X POST "https://api.veriglob.com/v1/wallets/wallet_abc123def456/credentials" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"password": "secure-wallet-password",
"credential": "v4.public.eyJpc3MiOi...",
"metadata": {
"label": "Employment at Acme Corp",
"tags": ["employment", "acme"]
}
}'

201 Created

{
"status": "success",
"message": "Credential stored successfully",
"data": {
"credential_id": "urn:uuid:3978344f-8596-4c3a-a978-8fcaba3903c5",
"wallet_id": "wallet_abc123def456",
"credential_type": "EmploymentCredential",
"issuer": "did:key:z6MkissuerDID...",
"stored_at": "2024-01-20T14:00:00Z"
}
}
StatusDescription
400Invalid credential or missing fields
401Invalid password or API key
404Wallet not found
429Rate limit exceeded

Lists all credentials stored in a wallet.

GET /v1/wallets/{wallet_id}/credentials

Requires BearerAuth or ApiKeyAuth.

ParameterTypeRequiredDescription
wallet_idstringYesThe wallet ID
ParameterTypeRequiredDescription
passwordstringYesThe wallet password
Terminal window
curl -X GET "https://api.veriglob.com/v1/wallets/wallet_abc123def456/credentials?password=secure-wallet-password" \
-H "Authorization: Bearer your-api-key"

200 OK

{
"status": "success",
"message": "Credentials retrieved successfully",
"data": {
"credentials": [
{
"credential_id": "urn:uuid:3978344f-8596-4c3a-a978-8fcaba3903c5",
"credential_type": "EmploymentCredential",
"issuer": "did:key:z6MkissuerDID1...",
"stored_at": "2024-01-20T14:00:00Z",
"metadata": {
"label": "Employment at Acme Corp",
"tags": ["employment", "acme"]
}
},
{
"credential_id": "urn:uuid:4567890a-bcde-4f01-2345-67890abcdef0",
"credential_type": "EducationCredential",
"issuer": "did:key:z6MkissuerDID2...",
"stored_at": "2024-01-25T09:15:00Z",
"metadata": {
"label": "BS Computer Science",
"tags": ["education", "degree"]
}
}
],
"total": 2
}
}

Removes a credential from a wallet.

DELETE /v1/wallets/{wallet_id}/credentials/{credential_id}

Requires BearerAuth or ApiKeyAuth.

ParameterTypeRequiredDescription
wallet_idstringYesThe wallet ID
credential_idstringYesThe credential ID to remove
FieldTypeRequiredDescription
passwordstringYesThe wallet password
Terminal window
curl -X DELETE "https://api.veriglob.com/v1/wallets/wallet_abc123def456/credentials/urn:uuid:3978344f-8596-4c3a-a978-8fcaba3903c5" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"password": "secure-wallet-password"
}'

200 OK

{
"status": "success",
"message": "Credential removed successfully",
"data": {
"credential_id": "urn:uuid:3978344f-8596-4c3a-a978-8fcaba3903c5",
"deleted_at": "2024-02-01T10:00:00Z"
}
}

Wallets are encrypted using industry-standard encryption:

  • Key Derivation: Argon2id from the user’s password
  • Encryption: AES-256-GCM for wallet contents
  • Key Storage: Only encrypted data is stored; passwords are never persisted
  1. Use strong passwords - Minimum 12 characters with mixed case, numbers, and symbols
  2. Never share passwords - Each user should have their own wallet
  3. Backup wallet IDs - Store wallet IDs securely for recovery
  4. Use separate wallets - Consider separate wallets for different purposes (personal, business)
  5. Regular audits - Periodically review stored credentials