How to rotate a Vercel access token
Reissue a Vercel access token with the narrowest scope that works, full account, team or one project, switch CI to it, then remove the old token by its ID.
Part of the guide
VercelAccess token
Starts with: vcp_…- Where to issue a new one
- vercel.com/account/tokens
- What a leaked key reaches
- A Full Account token acts on your account and every team you belong to. A team or project token stays inside that team or project.
- Can be scoped
- Yes
Keys can be limited to fewer permissions or resources.
- Expires
- Chosen at creation; the token stops working after that date
- Switching keys
- Overlap windowRevokes at once
What Crunu does here
Crunu doesn't reissue keys at providers. It shows which values to replace and keeps the new one.
Build the list for a departure with the offboarding checklistOn this page
Create a new access token on the Account Tokens page with the same scope as the old one, or a narrower one, give it to your CI and scripts, confirm that a request succeeds, and then remove the old token. Tokens are independent, so both work while you switch. Vercel's own advice for replacing a token runs in this order too: issue and distribute the new token before revoking one that is still in use, because any script using a revoked token stops authenticating (Vercel guide).
Crunu doesn't create or remove Vercel tokens, and it has no Vercel integration. It finds the Vercel values a departing person could read, keeps the replacement as a new version of the environment, and passes it to the Vercel CLI and your scripts.
Scope is the decision that matters
Every token has one of three scopes (access tokens):
| Scope | What it reaches |
|---|---|
| Full Account | your personal account and every team you belong to |
| Team | one team: read and write across all its projects |
| Project | one project in a team: read and write for that project only |
A project-scoped token is refused for any other project, for team-level resources and for user-level resources. If an old CI token is Full Account and its job deploys one project, the reissue is the right time to narrow it. Team and project tokens also make the teamId parameter unnecessary, because Vercel infers the team and project from the token; Full Account tokens still need ?teamId= to reach a team.
Some teams require two-factor authentication or SAML before you can create tokens scoped to them, and the dashboard tells you when you select the team.
Tokens always belong to a person
You create every token from your personal account settings, even one scoped to a team or a single project. A team's CI token is therefore always someone's token. Vercel's documentation doesn't say what happens to a team or project token when its owner leaves the team, so don't rely on either outcome. When a person who created CI tokens leaves, reissue those tokens from an account that stays, and remove the old ones.
Where the old token hides
Before removing the old token, list its copies. The usual places are a CI secret that runs the Vercel CLI, a --token flag inside a deploy script, a shell profile on someone's laptop, and server code that calls the REST API. Vercel's own example keeps the token in server-side environment variables, never in client-side code. Once each of these runs under crunu run, the next reissue has a single copy to replace: the one in the Crunu environment.
Reissue without downtime
- With your personal account selected in the scope selector, open the Account Tokens page. Enter a descriptive name, choose the scope, choose an expiration and select Create. Copy the value: Vercel shows it only once.
- Save it in Crunu as
VERCEL_TOKENin the environment your pipeline uses, for exampleweb-app / production. The CLI readsVERCEL_TOKEN, and the save adds a version to the environment's history. - Switch every consumer. Commands started as
crunu run --env web-app/production -- vercel …get the newest version on each run, without a restart. - Check the new token with a read request, like the one below. A
403 Forbiddenusually points to the expiration or the scope. - Find the old token's ID with
vercel tokens lsand remove it withvercel tokens rm, or delete it on the Account Tokens page.
crunu run --env web-app/production -- sh -c \
'curl -s https://api.vercel.com/v9/projects -H "Authorization: Bearer $VERCEL_TOKEN"'
vercel tokens ls --format json
vercel tokens rm tok_abc123To create tokens from the command line, vercel tokens create "GitHub Actions deploy" --project prj_abc123 makes a project-scoped token. That command needs a classic personal access token with account-level scope: sessions from vercel login can't create tokens, and team-only or project-only tokens are rejected (vercel tokens). The CLI prints the new value once, to standard output.
When to reissue a Vercel token
- A departure. Reissue the tokens they created for shared automation and any token they could read. In Crunu, removing them produces a reissue checklist of those values by name, with Where to reissue pointing to Vercel's token page.
- A leak. Remove the token at once, then deploy the replacement. Scripts that still hold the old value stop authenticating.
- Expiry. Once the expiration date passes, the token stops working even if nobody revoked it. Put the date in your calendar, or the pipeline will tell you on the day.
What to rotate when a developer leaves covers the full order of work, and the offboarding checklist lists what to reissue for your stack. Tokens are created and removed in Vercel; the record of when the new one reached each environment is kept in Crunu.
Frequently asked questions
Something else? Write to support@crunu.com
Can a Vercel token be limited to a single project?
Yes. When you create a token, choose a team in Scope and then one project. A project-scoped token can only read and write that project's resources and is refused for other projects, team-level resources and user-level resources.
Why does vercel tokens create reject my token?
Creating tokens from the CLI needs a classic personal access token with account-level scope. OAuth sessions from vercel login can't create tokens, and team-only or project-only tokens are rejected too. Create the first token on the Account Tokens page.
Do Vercel access tokens expire?
You choose an expiration when you create the token. Vercel's guide says that once the date passes, the token stops working even if you forget to revoke it. The expiration doesn't remove the need to revoke tokens that leaked or that a leaver could read.
Does Crunu rotate Vercel tokens?
No. Crunu doesn't call Vercel. It shows which Vercel values a departing person received, stores the new token as a new environment version and gives it to the Vercel CLI and your scripts through crunu run.
Sources
Every source this page relies on, with the date we last checked it.
- Vercel Docs: Access tokens · checked October 30, 2026
- Vercel Docs: vercel tokens · checked October 30, 2026
- Vercel Knowledge Base: How do I use a Vercel API access token? · checked October 30, 2026