Credential storage
Credentials are stored in the Gazebo vault — a PostgreSQL table where every value is encrypted at rest with AES-256-GCM before being written.
Storage model
Each credential entry stores:
user_id— which account owns this credentialservice— the service name (e.g.stripe)ciphertext— the AES-256-GCM encrypted credential valuenonce— the random nonce used for this encryption (required for decryption)created_at,updated_at
The plaintext credential value is never written to the database.
Plaintext exposure boundary
Stored values are not displayed in dashboard connection views. However, authorized agent credential retrieval through the runtime API or MCP returns the actual plaintext value over HTTPS.
- The calling agent runtime receives the key; a third-party host running that agent receives it too.
- Provider-side permissions determine what a retrieved key can do. Gazebo does not proxy later calls.
- Keep credentials out of application logs, prompts and screenshots.
Gazebo decrypts credentials server-side for authorized retrieval and supported service operations. Encryption at rest does not mean the agent or Gazebo infrastructure cannot access a credential at runtime.
What "connecting a service" does
When you connect a service:
- You paste your API key or complete OAuth
- The server receives the plaintext value over TLS
- The server encrypts it with AES-256-GCM using the vault key
- The ciphertext and nonce are written to the database
- Dashboard connection views expose status rather than the stored value
There is no "view credential" feature. If you need to see a stored credential value, you must retrieve it via get_credential using a valid agent token — which is logged.
Revoking that agent blocks future retrieval. It does not invalidate a provider key already retrieved; suspected compromise may require provider-side revocation or rotation.
Encryption key management
See Encryption model for key details. The critical operational constraint: the VAULT_ENCRYPTION_KEY must never change after setup. Key rotation requires re-encrypting every stored credential — a manual migration that must be planned carefully.
OAuth credentials
For OAuth-connected services (Stripe OAuth, Google OAuth, etc.), Gazebo stores both the access token and the refresh token in the vault. Refresh tokens are re-encrypted if rotated. The OAuth flow never exposes tokens to the browser after the initial connection.