Sovra Sovra

CLI Reference

Complete reference for the sovra command-line tool.

Global Flags

Flag Description Default
--config Config file path  
--org-id Organization ID  
--api-url API Gateway URL http://localhost:8080
--json Output in JSON format false
--cert Client certificate file for mTLS admin authentication  
--key Client private key file for mTLS admin authentication  
--ca-cert CA certificate file for server verification  

Admin operations require mTLS authentication. Pass --cert and --key for every admin command:

sovra --cert admin.crt --key admin.key workspace list

login

Authenticate with the Sovra API. Uses SSO by default.

When no --issuer-url or --client-id is provided, the CLI auto-discovers SSO configuration from the server via GET /api/v1/sso-config. You can also set SOVRA_SSO_ISSUER_URL and SOVRA_SSO_CLIENT_ID environment variables.

sovra login                                      # auto-discover from server
sovra login --issuer-url https://idp.example.org --client-id sovra
Flag Description Default
--issuer-url OIDC issuer URL (auto-discovered if omitted)  
--client-id OIDC client ID (auto-discovered if omitted)  
--auth-method Authentication method (sso, approle) sso

For legacy AppRole authentication:

sovra login --auth-method approle

logout

Log out from the Sovra API.

sovra logout

activity

View and export activity logs.

activity list

List activity across the organization.

sovra activity list --since 2026-01-01T00:00:00Z --limit 50
Flag Description Default
--since Start time (RFC3339)  
--until End time (RFC3339)  
--limit Maximum results 100

activity export

Export activity logs to a file.

sovra activity export \
  --since 2026-01-01T00:00:00Z \
  --until 2026-02-01T00:00:00Z \
  --output activity-export.json \
  --format json
Flag Description Default
--since Start time (RFC3339)  
--until End time (RFC3339)  
--output Output file  
--format Export format (json, csv) json

workspace

Manage shared cryptographic workspaces.

workspace create

sovra workspace create \
  --name genomics-data \
  --group-id group-123 \
  --classification CONFIDENTIAL \
  --purpose "Shared genomics research"
Flag Description Default
--name Workspace name (required)  
--group-id Identity group ID for participants  
--classification Data classification CONFIDENTIAL
--purpose Workspace purpose  

workspace list

sovra workspace list --limit 20
Flag Description Default
--limit Maximum results 50
--offset Result offset 0

workspace get

sovra workspace get ws-123

workspace update

sovra workspace update ws-123 --purpose "Updated purpose"
Flag Description
--purpose New workspace purpose
--classification New data classification
--mode New workspace mode
--crk-signature CRK co-signature (base64, required for CRK-protected workspaces)

workspace rotate-dek

Rotate the Data Encryption Key for a workspace.

sovra workspace rotate-dek ws-123

workspace extend

Extend workspace expiration.

sovra workspace extend ws-123 --expires-at 2027-01-01T00:00:00Z
Flag Description
--expires-at New expiration time (RFC3339)

workspace invite

sovra workspace invite ws-123 --org-id org-b
Flag Description
--org-id Organization ID to invite

workspace accept-invitation

sovra workspace accept-invitation ws-123 --org-id org-b --group-id group-123
Flag Description
--org-id Organization ID
--group-id Identity group ID to join as

workspace decline-invitation

sovra workspace decline-invitation ws-123 --org-id org-b

workspace request-access

Request access to an existing workspace.

sovra workspace request-access ws-123 --justification "Need access for data analysis"
Flag Description
--justification Justification for the access request

workspace admission grant

Grant explicit admission to a workspace. Required for SECRET and CRK-protected workspaces.

sovra workspace admission grant ws-123 \
  --identity-id user-456 \
  --identity-type user \
  --org-id org-a
Flag Description Default
--identity-id Identity ID to grant admission to (required)  
--identity-type Identity type user
--org-id Organization ID  

workspace admission list

List all admissions for a workspace.

sovra workspace admission list ws-123

workspace admission get

Get admission status for a specific identity.

sovra workspace admission get ws-123 user-456

workspace admission revoke

Revoke an identity’s admission to a workspace.

sovra workspace admission revoke ws-123 user-456

workspace archive

sovra workspace archive ws-123

workspace delete

sovra workspace delete ws-123

workspace export

Export a workspace as a portable bundle.

sovra workspace export ws-123 --output backup.json
Flag Description
--output Output file path

workspace import

Import a workspace from a bundle.

sovra workspace import --input backup.json
Flag Description
--input Input file path

federation

Manage federation relationships with partner organizations.

federation list

sovra federation list

federation status

sovra federation status partner-org-id

federation init

Initialize federation for the organization.

sovra federation init

federation establish

sovra federation establish \
  --partner-org org-b \
  --partner-url https://partner.example.org
Flag Description
--partner-org Partner organization ID
--partner-url Partner API URL

federation revoke

sovra federation revoke partner-org-id

federation health

sovra federation health

federation import-cert

sovra federation import-cert \
  --partner-org org-b \
  --cert-file partner-cert.pem \
  --public-key-file partner-pubkey.pem
Flag Description
--partner-org Partner organization ID
--cert-file Certificate file path
--public-key-file Partner’s RSA public key file (PEM). Required for air-gap DEK re-wrapping

federation renew-cert

Renew the federation certificate for a partner organization.

sovra federation renew-cert partner-org-id

policy

Manage OPA Rego policies for access control.

policy list

sovra policy list --workspace ws-123
Flag Description
--workspace Workspace ID

policy get

sovra policy get policy-123

policy create

sovra policy create \
  --name data-access \
  --workspace ws-123 \
  --rego-file policy.rego
Flag Description
--name Policy name
--rego-file Path to Rego policy file
--workspace Workspace ID

policy update

sovra policy update policy-123 --rego-file updated-policy.rego
Flag Description
--rego-file Path to Rego policy file

policy delete

sovra policy delete policy-123

policy evaluate

sovra policy evaluate --workspace ws-123 --input-file eval-input.json
Flag Description
--workspace Workspace ID
--input-file JSON input file for evaluation

policy validate

sovra policy validate policy.rego

audit

Query and export audit logs.

audit query

sovra audit query \
  --since 2026-01-01T00:00:00Z \
  --event-type workspace.access \
  --limit 50
Flag Description Default
--since Start time (RFC3339)  
--until End time (RFC3339)  
--event-type Filter by event type  
--limit Maximum results 100

audit get

sovra audit get event-123

audit export

sovra audit export \
  --format json \
  --output audit-export.json \
  --since 2026-01-01T00:00:00Z
Flag Description Default
--format Export format (json, csv) json
--output Output file  
--since Start time (RFC3339)  
--until End time (RFC3339)  

audit stats

sovra audit stats --since 2026-01-01T00:00:00Z
Flag Description
--since Start time (RFC3339)

audit verify

Verify audit log integrity.

sovra audit verify \
  --since 2026-01-01T00:00:00Z \
  --until 2026-02-01T00:00:00Z
Flag Description
--since Start time (RFC3339)
--until End time (RFC3339)

crk

Customer Root Key management.

crk init

Generate a new CRK with two-factor protected shares (fully offline). Each share is encrypted with a random seed code. The admin distributes seed codes to custodians, who then bind their own password via crk bind-seed.

sovra crk init --org-id my-org --shares 5 --threshold 3 --output crk-init.json
Flag Description Default
--org-id Organization ID (required)  
--shares Total number of shares 5
--threshold Threshold to reconstruct 3
--output Output file for init file (required)  

Prints seed codes to stdout. Distribute each seed code to the corresponding custodian via a secure out-of-band channel.

crk bind-seed

Decrypt a share using the seed code, re-encrypt with (seed code + password). Run by each custodian offline.

sovra crk bind-seed \
  --init-file crk-init.json \
  --index 1 \
  --seed-code <HEX_SEED_CODE> \
  --output custodian-1.json
Flag Description
--init-file Path to CRK init file (required)
--index Share index, 1-based (required)
--seed-code Seed code in hex (required)
--output Output file for custodian seed file (required)

The CLI prompts for a password (twice, with confirmation). The password never leaves the custodian’s machine.

crk import-seeds

Assemble custodian seed files into a final secured CRK file (fully offline).

sovra crk import-seeds \
  --init-file crk-init.json \
  --seed-file custodian-1.json \
  --seed-file custodian-2.json \
  --output crk-secured.json
Flag Description
--init-file Path to CRK init file (required)
--seed-file Custodian seed file path (repeatable, required)
--output Output file for secured CRK file (required)

crk generate

Note: Outputs plaintext shares. For production, use crk init which provides two-factor share protection.

Generate a new CRK with Shamir secret sharing.

sovra crk generate --shares 5 --threshold 3 --output crk-shares.json
Flag Description Default
--shares Total number of shares 5
--threshold Threshold to reconstruct 3
--output Output file for shares stdout

crk sign

Sign data using CRK shares.

sovra crk sign \
  --shares-file crk-shares.json \
  --public-key BASE64_KEY \
  --data-file message.txt
Flag Description
--shares-file JSON file containing shares
--public-key Public key (base64)
--data Data to sign (inline)
--data-file File containing data to sign

Supports three share formats:

crk verify

Verify a signature against a CRK public key.

sovra crk verify \
  --public-key BASE64_KEY \
  --signature BASE64_SIG \
  --data-file message.txt
Flag Description
--public-key Public key (base64)
--signature Signature (base64)
--data Original data (inline)
--data-file File containing original data

crk rotate

Start a CRK rotation ceremony.

sovra crk rotate --threshold 3
Flag Description
--threshold Threshold for rotation ceremony

crk ceremony start

sovra crk ceremony start --shares 5 --threshold 3
Flag Description Default
--shares Total number of shares 5
--threshold Threshold to reconstruct 3

crk ceremony add-share

sovra crk ceremony add-share ceremony-123 \
  --share-file share.json \
  --share-index 1
Flag Description
--share-file JSON file containing the share
--share-data Base64-encoded share data
--share-index Share index

Supports three share formats:

crk ceremony complete

sovra crk ceremony complete ceremony-123

crk ceremony cancel

sovra crk ceremony cancel ceremony-123

crk generate-ceremony start

Start a password-protected CRK generation ceremony. Each shareholder will independently seed their share with a password before the CRK is generated.

sovra crk generate-ceremony start --org-id org-123 --shares 5 --threshold 3
Flag Description Default
--org-id Organization ID  
--shares Total number of shares 5
--threshold Threshold required to reconstruct 3

crk generate-ceremony seed

Seed a share index with a password. Run by each shareholder independently. The CLI prompts for a password (hidden input, with confirmation), derives an encryption key locally via Argon2id, and sends the derived key to the server. The password never leaves the shareholder’s machine.

sovra crk generate-ceremony seed <ceremony-id> --index 1 --custodian-name "Alice"
Flag Description
--index Share index (1-based, required)
--custodian-name Name of the custodian (required)

crk generate-ceremony status

Check the status of a generation ceremony.

sovra crk generate-ceremony status <ceremony-id>

crk generate-ceremony complete

Complete the ceremony. The server generates the Ed25519 keypair, splits via Shamir, encrypts each share with the corresponding shareholder’s derived key, zeroes all plaintext material, and returns the CRK metadata with encrypted share blobs.

sovra crk generate-ceremony complete <ceremony-id> --output crk.json
Flag Description
--output Output file for CRK + encrypted shares (default: stdout)

crk generate-ceremony cancel

Cancel an in-progress generation ceremony.

sovra crk generate-ceremony cancel <ceremony-id>

crk generate-ceremony prepare-seed

Prepare an offline seed file for an air-gap ceremony. The custodian runs this on their own machine — no server connection is needed. The CLI prompts for a password, derives a key via Argon2id, and writes a JSON seed file.

sovra crk generate-ceremony prepare-seed --index 1 --custodian-name "Alice" --output seed-alice.json
Flag Description
--index Share index (1-based, required)
--custodian-name Name of the custodian (required)
--output Output file path for the seed JSON (required)

The seed file is written with 0600 permissions. Securely delete it after transferring to the admin.

crk generate-ceremony import-seed

Import one or more offline seed files (created by prepare-seed) into an active generation ceremony. Run by the admin on a server-connected machine.

sovra crk generate-ceremony import-seed <ceremony-id> \
  --seed-file seed-alice.json \
  --seed-file seed-bob.json
Flag Description
--seed-file Path to a seed file (repeatable, at least one required)

identity

Manage admin, user, service, and device identities.

identity list

sovra identity list --type admin
Flag Description
--type Identity type (admin, user, service, device)

identity get

sovra identity get identity-123 --type admin
Flag Description
--type Identity type (admin, user, service, device)

identity create admin

sovra identity create admin \
  --email admin@example.org \
  --name "Admin User" \
  --role security_admin \
  --sso-provider azure_ad \
  --sso-subject sub-456
Flag Description Default
--email Admin email address  
--name Admin display name  
--role Admin role operations_admin
--sso-provider SSO provider (azure_ad, okta, google)  
--sso-subject SSO subject identifier  

Roles: super_admin, security_admin, operations_admin, auditor

identity create service

sovra identity create service \
  --name data-pipeline \
  --auth-method approle
Flag Description Default
--name Service name  
--auth-method Authentication method approle

Auth methods: approle, kubernetes, cert

identity create user-sso

sovra identity create user-sso \
  --email user@example.org \
  --name "User Name" \
  --sso-provider azure_ad \
  --sso-subject sub-123
Flag Description
--email User email address
--name User display name
--sso-provider SSO provider (azure_ad, okta, google)
--sso-subject SSO subject identifier

identity delete

sovra identity delete identity-123 --type admin
Flag Description
--type Identity type (admin, user, service)

identity admin disable

sovra identity admin disable admin-123

identity admin enable

sovra identity admin enable admin-123

identity service rotate

Rotate credentials for a service identity.

sovra identity service rotate service-123

identity admin bootstrap

Bootstrap the first admin on a clean instance. Generates a CRK and creates the initial admin identity.

sovra --api-url https://control.example.com \
  identity admin bootstrap \
  --email admin@example.org \
  --name "First Admin" \
  --shares 5 \
  --threshold 3

identity admin enroll

Complete admin enrollment using an enrollment token (received from another admin). Generates an mTLS certificate.

sovra --api-url https://control.example.com \
  identity admin enroll \
  --enrollment-token <TOKEN>

identity admin renew-cert

Renew the current admin’s mTLS certificate.

sovra --cert admin.crt --key admin.key \
  identity admin renew-cert

identity admin sign-message

Sign a message using the admin’s mTLS key (for CRK operations).

sovra --cert admin.crt --key admin.key \
  identity admin sign-message --data "data to sign"

identity enroll-device

sovra identity enroll-device --name "edge-sensor-1" --device-type sensor
Flag Description
--name Device name
--device-type Device type

identity revoke-device

sovra identity revoke-device device-123

identity mfa enable

sovra identity mfa enable admin-123

identity mfa verify

sovra identity mfa verify admin-123 --code 123456
Flag Description
--code MFA verification code

identity group create

sovra identity group create --name researchers --description "Research team"
sovra identity group create --name engineers --idp-group-id "00g1abc2de" --description "Synced from IdP"
Flag Description
--name Group name
--description Group description
--idp-group-id IdP group ID for automatic membership sync

identity group update

Update an existing identity group’s name, description, or IdP binding.

sovra identity group update group-123 --name "new-name"
sovra identity group update group-123 --idp-group-id "00g1abc2de"
sovra identity group update group-123 --idp-group-id ""  # clear IdP binding
Flag Description
--name New group name
--description New group description
--idp-group-id IdP group ID (use empty string to clear)

identity group list

sovra identity group list

identity group add-member

sovra identity group add-member group-123 \
  --identity-id user-456 \
  --identity-type user
Flag Description
--identity-id Identity ID to add
--identity-type Identity type (admin, user, service, device)

identity group remove-member

sovra identity group remove-member group-123 --identity-id user-456
Flag Description
--identity-id Identity ID to remove

identity group join-requests

List pending join requests for a group.

sovra identity group join-requests group-123

identity group approve-join

Approve a pending join request.

sovra identity group approve-join request-123

identity group deny-join

Deny a pending join request.

sovra identity group deny-join request-123

identity role create

sovra identity role create --name data-reader --description "Read-only data access"
Flag Description
--name Role name
--description Role description

identity role list

sovra identity role list

identity role assign

sovra identity role assign role-123 \
  --identity-id user-456 \
  --identity-type user
Flag Description
--identity-id Identity ID to assign role to
--identity-type Identity type (admin, user, service, device)

identity role unassign

sovra identity role unassign role-123 --identity-id user-456
Flag Description
--identity-id Identity ID to unassign role from

edge

Manage edge nodes (Vault clusters).

edge list

sovra edge list

edge get

sovra edge get edge-123

edge register

sovra edge register \
  --name edge-eu-west \
  --vault-addr https://vault.eu-west.example.org:8200 \
  --region eu-west
Flag Description
--name Edge node name
--vault-addr Vault address
--region Region

edge unregister

sovra edge unregister edge-123

edge health

sovra edge health edge-123

edge sync-policies

sovra edge sync-policies edge-123

edge sync-keys

sovra edge sync-keys edge-123 --workspace ws-123
Flag Description
--workspace Workspace ID

edge sync-status

sovra edge sync-status edge-123

cert

Manage certificates issued by the Vault PKI engine.

cert issue

sovra cert issue \
  --common-name api.example.org \
  --role default \
  --ttl 8760h \
  --alt-names api2.example.org,api3.example.org
Flag Description Default
--common-name Common name for the certificate  
--role PKI role to use default
--ttl TTL for the certificate  
--alt-names Subject alternative names (comma-separated)  

cert revoke

sovra cert revoke AA:BB:CC:DD

cert get

sovra cert get AA:BB:CC:DD

cert list

sovra cert list

cert ca-chain

sovra cert ca-chain

cert tidy

Clean up expired certificates.

sovra cert tidy --safety-buffer 72h
Flag Description
--safety-buffer Safety buffer duration

emergency-access

Manage break-glass emergency access requests.

emergency-access request

sovra emergency-access request \
  --org-id org-a \
  --reason "Critical security incident requiring immediate access"
Flag Description
--org-id Organization ID
--reason Reason for emergency access

emergency-access approve

sovra emergency-access approve request-123

emergency-access deny

sovra emergency-access deny request-123

emergency-access complete

sovra emergency-access complete request-123

emergency-access verify

Verify emergency access with CRK signature.

sovra emergency-access verify request-123 --signature BASE64_SIG
Flag Description
--signature CRK signature (base64)

emergency-access list

sovra emergency-access list --org-id org-a
Flag Description
--org-id Organization ID

emergency-access get

sovra emergency-access get request-123

account-recovery

Account recovery using CRK share reconstruction.

account-recovery initiate

sovra account-recovery initiate \
  --admin-id admin-123 \
  --reason "Lost credentials" \
  --type lost_credentials
Flag Description Default
--admin-id Admin ID initiating recovery  
--reason Reason for recovery  
--type Recovery type lost_credentials

Types: lost_credentials, locked_account

account-recovery share

Submit a CRK share for account recovery.

sovra account-recovery share recovery-123

account-recovery complete

sovra account-recovery complete recovery-123

compliance

Generate compliance reports.

compliance summary

sovra compliance summary \
  --since 2026-01-01T00:00:00Z \
  --until 2026-02-01T00:00:00Z
Flag Description
--since Start time (RFC3339)
--until End time (RFC3339)

compliance gdpr-dsar

Generate a GDPR Data Subject Access Request report.

sovra compliance gdpr-dsar --subject-id user-123
Flag Description
--subject-id Data subject ID

compliance access-review

sovra compliance access-review \
  --since 2026-01-01T00:00:00Z \
  --until 2026-02-01T00:00:00Z
Flag Description
--since Start time (RFC3339)
--until End time (RFC3339)

backup

Manage system backups.

backup create

Create a new backup. The backup payload is encrypted at rest using the organization’s KEK via Vault transit. Requires a CRK co-signature.

sovra backup create --type full --crk-signature <base64-signature>
Flag Description Default
--type Backup type (full, incremental) full
--crk-signature CRK co-signature (base64-encoded, required)  

backup list

List available backups.

sovra backup list

backup get

Get details of a specific backup.

sovra backup get backup-123

backup restore

Restore from a backup. Requires a CRK co-signature. Restore is restricted to the same organization or a clean (empty) instance — cross-org restore is rejected.

sovra backup restore backup-123 --crk-signature <base64-signature>
Flag Description Default
--crk-signature CRK co-signature (base64-encoded, required)  

rotation-policy

Manage automatic key rotation policies for workspaces.

rotation-policy set

sovra rotation-policy set ws-123 --max-age 720h --enabled
Flag Description Default
--max-age Maximum key age (e.g. 720h)  
--enabled Enable the policy true

rotation-policy get

sovra rotation-policy get ws-123

rotation-policy delete

sovra rotation-policy delete ws-123

rotation-policy list

sovra rotation-policy list

message

Send and receive encrypted direct messages between users on federated control planes without creating a workspace.

message send

sovra message send --to <recipient-id> --to-org <org-id> --subject "..." --body "..."
sovra message send --to <recipient-id> --subject "..." --body-file ./message.txt
Flag Description Default
--to Recipient identity ID (required)
--to-org Recipient organization ID Caller’s --org-id
--subject Message subject (max 256 chars) (required)
--body Message body text  
--body-file File containing message body (max 64KB)  

When --to-org is omitted, the message is treated as same-org (no federation required). Cross-org messages require an active federation link with the recipient’s organization.

message list

sovra message list [--sent] [--limit N]
Flag Description Default
--sent Show sent messages instead of inbox false
--limit Maximum messages to return 50

message read

sovra message read <message-id>

Decrypts and displays the message body. Received messages are automatically marked as read.

message delete

sovra message delete <message-id>

Deletes a message you own (sent or received).