The Credential Vault stores per-user secrets the agent encounters that aren’t
third-party OAuth grants — a SaaS API key it generated, a session cookie, a KYC
reference. Each value is envelope-encrypted with a managed KMS, scoped to one
tenant user (see
Architecture → Vault encryption).
CLI First
| Tool | Type | Description |
|---|
vault_list | Core | List a user’s entry keys (values masked) |
vault_put | Core | Store or replace an encrypted entry |
vault_reveal | Core | Decrypt and return a value (POST — never in a URL) |
vault_delete | Core | Delete an entry |
vault_rotate | Management | Re-wrap the encryption key (or fully re-encrypt) |
Storing & Revealing
put is idempotent on the key. reveal is a POST so the secret travels in the
response body, never in a URL.
Response (reveal):
Parameters (put)
| Param | Type | Required | Default | Description |
|---|
value | string | Yes | — | The secret to encrypt and store |
kind | string | No | note | api_key, password, cookie, token, note, reference |
locked | boolean | No | false | If true, the entry can be stored but never revealed back |
expires_at | string | No | — | ISO timestamp; excluded from list and 404 on reveal once expired |
metadata | object | No | — | Arbitrary JSON attached to the entry |
locked entries are agent-profile-only — useful when an agent must use a secret indirectly
but should never read it back. rotate re-wraps the data key cheaply;
?regenerate_dek=true fully re-encrypts the value.
Listing & Deleting
Third-party connections surface read-only in the dashboard Vault tab alongside vault
entries, for one unified per-user credential view.
Error Handling
| Error | Cause | Recovery |
|---|
not_found | Key doesn’t exist, expired, or invalid user_id | Use GET .../vault to list current keys |
forbidden | Tried to reveal a locked entry | Locked entries can’t be revealed; store a new one |
invalid_input | Missing value on put | Provide a string value |
feature_not_configured | Vault KMS not configured on the API | Contact support |
Typical Workflow