Skip to main content
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 AWS KMS, scoped to one tenant user (see Architecture → Vault encryption).

CLI First

naive vault put instantly.api_key key_xyz --user alice --kind api_key
naive vault reveal instantly.api_key --user alice
naive vault list --user alice

Tools

ToolTypeDescription
vault_listCoreList a user’s entry keys (values masked)
vault_putCoreStore or replace an encrypted entry
vault_revealCoreDecrypt and return a value (POST — never in a URL)
vault_deleteCoreDelete an entry
vault_rotateManagementRe-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.
# Store (PUT)
curl -X PUT https://api.usenaive.ai/v1/users/{user_id}/vault/instantly.api_key \
  -H "Authorization: Bearer nv_sk_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "value": "key_xyz", "kind": "api_key" }'

# Reveal (POST — secret in body)
curl -X POST https://api.usenaive.ai/v1/users/{user_id}/vault/instantly.api_key/reveal \
  -H "Authorization: Bearer nv_sk_your_key"
Response (reveal):
{ "key": "instantly.api_key", "value": "key_xyz", "expires_at": null }

Parameters (put)

ParamTypeRequiredDefaultDescription
valuestringYesThe secret to encrypt and store
kindstringNonoteapi_key, password, cookie, token, note, reference
lockedbooleanNofalseIf true, the entry can be stored but never revealed back
expires_atstringNoISO timestamp; excluded from list and 404 on reveal once expired
metadataobjectNoArbitrary JSON attached to the entry
locked entries are operator-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

# List (values masked)
curl https://api.usenaive.ai/v1/users/{user_id}/vault \
  -H "Authorization: Bearer nv_sk_your_key"

# Delete
curl -X DELETE https://api.usenaive.ai/v1/users/{user_id}/vault/instantly.api_key \
  -H "Authorization: Bearer nv_sk_your_key"
Third-party connections surface read-only in the dashboard Vault tab alongside vault entries, for one unified per-user credential view.

Error Handling

ErrorCauseRecovery
not_foundKey doesn’t exist, expired, or invalid user_idUse GET .../vault to list current keys
forbiddenTried to reveal a locked entryLocked entries can’t be revealed; store a new one
invalid_inputMissing value on putProvide a string value
feature_not_configuredVault KMS not configured on the APIContact support

Typical Workflow

Agent generates an API key on a SaaS during onboarding

    ├─ PUT  /v1/users/alice/vault/saas.api_key      → Store it (kind: api_key)

    ├─ POST /v1/users/alice/vault/saas.api_key/reveal  → Read it back when calling the SaaS

    └─ POST /v1/users/alice/vault/saas.api_key/rotate  → Periodically re-wrap the key