Hold the API keys your developers need
You own the Stripe, OpenAI and email accounts. Keep their keys in one project, give developers test keys only, and send live keys to the server, not to people.
Oct 14, 2026 · 4 min read

Who this is for
You run the product. You own the Stripe, OpenAI, email and database accounts, and developers keep asking you for keys. The keys end up in chat, in email, and in a .env file on every laptop.
With getmyenv, the keys live in one encrypted project. You decide who reads which set. You work in the dashboard. Only your developers use a terminal.
1. Create the project
Sign in and choose New project. The first time, you set your Vault password and get a recovery code. Values are encrypted in your browser before upload.
Your recovery code opens your vault if you forget the Vault password. It stays with you. We never see it and cannot recover it. Store it somewhere safe, away from the Vault password.
New projects start with Development (open) and Production (Read-only).
2. Add the keys
Pick a context in the sidebar, then Add variable or Import. Use the names your developers' code reads, for example:
STRIPE_SECRET_KEY
OPENAI_API_KEY
SMTP_PASSWORD- Development: test keys, sandbox accounts, a staging database.
- Production: live keys. Only the owner sets Read-only values, in the dashboard.
3. Invite developers to Development
Open Project settings, Members. Enter a developer's email and tick Development only. A member reads every context you tick, so leave Production unticked.
The developer accepts, sets their own Vault password, and runs the app with the shared values. The values never pass through chat.
npx getmyenv start # pick the shared project
npx getmyenv run -- npm run dev4. Production goes to the server, not to people
In Project settings, Tokens, create a server token for Production and add the server's IP. The token is shown once. Put it in the server's environment as GETMYENV_TOKEN, or give it to whoever sets up the server. The server reads the live keys when the app starts. No developer copies them.
The steps for the server are in Run on a server with a Read-only context.
When someone leaves
Remove them in Members. Rotate keys is on by default: your browser makes new context keys, and their old copy stops working. Revoking stops new reads. A running process keeps the values it started with until it restarts.
Invites, joins and removals show in Activity. Names and emails only. Never values.
Removing someone does not change the key at Stripe or OpenAI. If they could read a key, rotate it at its provider too.
What this is not
getmyenv holds the values your apps read. It is not a password manager. Logins to the Stripe dashboard, two-factor codes and notes belong in 1Password or Bitwarden. The two work together: Chain 1Password or Bitwarden with getmyenv run.
Accounts created during the pilot stay free, up to 5 projects you own, 10 contexts each. Projects shared with you do not count.
Related docs: Sharing and transfer, Vault, Machine access