Overview
RunTools provides centralized secrets management for storing API keys, provider credentials, and tool configuration. Secrets are encrypted at rest with AES-256-GCM and managed via the dashboard, CLI, or API. The secrets system lives on the tools service (tools.runtools.ai/v1/secrets) and uses the same encryption as tool credentials.
Creating Secrets
Listing Secrets
Revealing Secrets
Reveal operations are auditable — the system logs who revealed what and when.cURL
Deleting Secrets
Secret Properties
| Property | Description | Values |
|---|---|---|
| name | Secret identifier (unique per org) | Any string |
| value | The secret value | Encrypted with AES-256-GCM |
| scope | Where this secret can be used | all, agents, tools, sandboxes |
| category | Grouping for UI display | provider, tool, custom |
| description | Human-readable description | Optional |
Dashboard: Credentials Page
The Credentials page (Dashboard > Organization > Credentials) combines:- API Keys — RunTools API keys (
rt_live_xxx) for authenticating API calls - SSH Keys — Public keys for SSH access to sandboxes
- Tool & Provider Keys — Secrets stored via the secrets API (provider keys, tool keys, custom)
- Connected Apps — OAuth connections for automatic credential resolution
Security
Encryption
- Secrets are encrypted at rest using AES-256-GCM
- 32-byte encryption key stored as environment variable on the tools service
- Each secret has its own random IV (initialization vector)
- Storage format:
base64(iv):base64(ciphertext):base64(tag)
Access Control
- Secrets are org-scoped — all members can access them
- Only authenticated users with valid API keys or WorkOS sessions can read/write
- Reveal operations are logged for audit purposes
What’s NOT Built Yet
- Per-secret access control (restrict who can reveal)
- Auto-rotation of keys
- Multiple keys per provider
- Integration with external secret managers (AWS Secrets Manager, Vault)
API Reference
| Method | Path | Description |
|---|---|---|
GET | /v1/secrets | List all secrets (metadata only) |
POST | /v1/secrets | Create or update (upsert) a secret |
GET | /v1/secrets/:name | Get single secret metadata |
DELETE | /v1/secrets/:name | Delete a secret |
POST | /v1/secrets/:name/reveal | Decrypt and return the secret value |
Best Practices
Use descriptive names
Use descriptive names
ANTHROPIC_API_KEY not KEY1. Include the provider/purpose in the name.Categorize properly
Categorize properly
Use
provider for LLM API keys, tool for tool credentials, custom for everything else.Use scope to limit exposure
Use scope to limit exposure
If a secret is only needed by agents, set scope to
agents instead of all.Rotate regularly
Rotate regularly
Update secrets periodically, especially after team changes. The upsert API makes rotation easy — just POST with the same name and a new value.
Never log secret values
Never log secret values
The API never returns values in list/get responses. Only use the reveal endpoint when you actually need the value.