Creating, updating, and deleting secrets requires the Organization admin role. Anyone in the organization can reference an existing secret by name when creating a job.
VESSL Cloud has completed a SOC 2 Type II security attestation. See trust.vessl.ai for the full report and our security posture.

Common use cases
| Env var | Used for |
|---|---|
HF_TOKEN | Hugging Face |
OPENAI_API_KEY | OpenAI |
ANTHROPIC_API_KEY | Anthropic |
WANDB_API_KEY | Weights & Biases |
GITHUB_TOKEN | GitHub |
DATABASE_URL | Database connection string |
How it works
- Encrypted before it leaves your machine — when you create a secret, the value is sealed with your organization’s public key locally (libsodium sealed-box), so the plaintext never appears in request bodies or access logs. VESSL Cloud re-encrypts it at rest with a master key and stores only the ciphertext.
- Injected at submission time — when you submit a workload, VESSL Cloud decrypts the value server-side and delivers it to your container as a Kubernetes Secret, surfaced as an environment variable when your container starts.
- Write-only values — after a secret is saved, VESSL Cloud never shows its value again to anyone, member or admin; the list and detail views show only metadata. To change a value, an admin rotates it by overwriting it with a new one — the previous value can’t be retrieved.
- Organization-scoped — secrets are shared across all teams in the organization. Every job in the org can reference any secret by name.
- Admin-managed — only Organization admin can create, update, or delete a secret. Members can see secret names and metadata and reference a secret by name in a workload.
- Soft delete — deleted secrets are kept for audit; their names become available for reuse immediately.
Create a secret
A secret has three core fields:| Field | What it is |
|---|---|
| Name | Your identifier for the secret. Unique per organization. |
| Key | The default env var name when the secret is injected into a workload. Must match ^[A-Za-z_][A-Za-z0-9_]*$ (env-var format, ≤256 chars). |
| Value | The plaintext credential. Encrypted before it leaves your machine. |
HF_TOKEN/HF_TOKEN) for simplicity, or use a different Name when you need multiple secrets that share the same env var — for example hf-prod and hf-staging, both with key HF_TOKEN.
GUI
- Open Organization > Secrets in the sidebar.
- Click New secret.
- Fill in Name, Key, Value, and an optional Description.
- Click Create.

CLI
--from-env and --from-stdin keep it out of your shell history.
Use a secret in a job
GUI
In the Environment Variables section of the job-create form, pick a secret from the Secrets dropdown. Click Add secret to attach more. Plain variables and secrets coexist, but if a plain variable uses the same env-var key as a secret, the plain variable’s value takes precedence.
CLI
Inject one or more secrets into a job with--secret:
--secret NAMEinjects the secret as an env var with the same name.--secret KEY=NAMEinjects the secret as env varKEY, referencing the secret namedNAME.- If the same env-var key appears in both
--envand--secret, the plaintext--envvalue takes precedence.
Workspaces don’t support secret injection yet. Secrets ship for jobs today; workspace support is on the roadmap.
Update a secret
Rotate the value, rename the env-var key, or edit the description:Running workloads do not pick up updated secret values automatically. Restart the workload to use the new value.
List and delete secrets
FAQ
Who can manage secrets?
Who can manage secrets?
Only Organization admin users can create, update, or delete secrets. Members can see secret names and metadata and reference a secret by name when creating a job — they don’t need admin access to use one. (A saved value can’t be viewed again by anyone, member or admin; this isn’t a member-only limit.)
How does VESSL Cloud protect my secret value?
How does VESSL Cloud protect my secret value?
The value is sealed with your organization’s public key on your machine (libsodium sealed-box) before it’s sent, so the plaintext never appears in request bodies or access logs. VESSL Cloud stores only the ciphertext — re-encrypted at rest with a master key — and decrypts it server-side only to inject it into your workload when you submit a job. Access is governed by our SOC 2 Type II controls.
Why are Name and Key separate fields?
Why are Name and Key separate fields?
Name is your identifier (unique per organization). Key is the env-var-shaped reference used by default when injecting into a workload. Keep them identical for simplicity (
HF_TOKEN/HF_TOKEN), or use distinct names when you need multiple secrets that map to the same env var (for example, hf-prod and hf-staging, both with key HF_TOKEN).What happens if --env and --secret use the same env-var key?
What happens if --env and --secret use the same env-var key?
The plaintext
--env KEY=value takes precedence — its value is used and the --secret KEY=name reference for the same key is ignored.Do running workloads see updated secret values?
Do running workloads see updated secret values?
No. Secrets are injected at container start. Restart the workload to pick up the new value.
Can I reuse a deleted secret's name?
Can I reuse a deleted secret's name?
Yes. Deleted secrets are soft-deleted, so the name becomes available immediately. Pass
--include-deleted to vesslctl secret list to inspect the history.