Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".
vercel login.VERCEL_TOKEN is already set in the environmentprintenv VERCEL_TOKEN
.env file under VERCEL_TOKENgrep '^VERCEL_TOKEN=' .env 2>/dev/null
export VERCEL_TOKEN=$(grep '^VERCEL_TOKEN=' .env | cut -d= -f2-)
.env file under a different namevca_):grep -i 'vercel' .env 2>/dev/null
VERCEL_TOKEN:export VERCEL_TOKEN=$(grep '^<VARIABLE_NAME>=' .env | cut -d= -f2-)
VERCEL_TOKEN is exported as an environment variable, the Vercel CLI reads it natively — do not pass it as a --token flag. Putting secrets in command-line arguments exposes them in shell history and process listings.# Bad — token visible in shell history and process listings
vercel deploy --token "vca_abc123"
# Good — CLI reads VERCEL_TOKEN from the environment
export VERCEL_TOKEN="vca_abc123"
vercel deploy
vercel link.# Check environment
printenv VERCEL_PROJECT_ID
printenv VERCEL_ORG_ID
# Or check .env
grep -i 'vercel' .env 2>/dev/null
# e.g. "my-team" from "https://vercel.com/my-team/my-project"
echo "$PROJECT_URL" | sed 's|https://vercel.com/||' | cut -d/ -f1
VERCEL_ORG_ID and VERCEL_PROJECT_ID in your environment, export them — the CLI will use these automatically and skip any .vercel/ directory:export VERCEL_ORG_ID="<org-id>"
export VERCEL_PROJECT_ID="<project-id>"
VERCEL_ORG_ID and VERCEL_PROJECT_ID must be set together — setting only one causes an error.npm install -g vercel
vercel --version
VERCEL_TOKEN and VERCEL_PROJECT_ID are set in the environment, deploy directly:vercel deploy -y --no-wait
VERCEL_ORG_ID or --scope):vercel deploy --scope <team-slug> -y --no-wait
vercel deploy --prod --scope <team-slug> -y --no-wait
vercel inspect <deployment-url>
# Does the project have a git remote?
git remote get-url origin 2>/dev/null
# Is it already linked to a Vercel project?
cat .vercel/project.json 2>/dev/null || cat .vercel/repo.json 2>/dev/null
vercel link --repo --scope <team-slug> -y
.vercel/repo.json. More reliable than plain vercel link, which matches by directory name.vercel link --scope <team-slug> -y
.vercel/project.json.vercel link --project <project-name> --scope <team-slug> -y
orgId in .vercel/project.json or .vercel/repo.json to verify it matches the intended team.git add .
git commit -m "deploy: <description of changes>"
git push
sleep 5
vercel ls --format json --scope <team-slug>
deployments array.vercel deploy --scope <team-slug> -y --no-wait
vercel inspect <deployment-url>
git clone <repo-url>
cd <repo-name>
vercel link --repo --scope <team-slug> -y
.vercel/ Directory.vercel/project.json — from vercel link. Contains projectId and orgId..vercel/repo.json — from vercel link --repo. Contains orgId, remoteName, and a projects map.VERCEL_ORG_ID + VERCEL_PROJECT_ID are both set in the environment.vercel project inspect or vercel link in an unlinked directory to detect state — they will interactively prompt or silently link as a side-effect. vercel ls is safe (in an unlinked directory it defaults to showing all deployments for the scope). vercel whoami is safe anywhere.# Set for all environments
echo "value" | vercel env add VAR_NAME --scope <team-slug>
# Set for a specific environment (production, preview, development)
echo "value" | vercel env add VAR_NAME production --scope <team-slug>
# List environment variables
vercel env ls --scope <team-slug>
# Pull env vars to local .env.local file
vercel env pull --scope <team-slug>
# Remove a variable
vercel env rm VAR_NAME --scope <team-slug> -y
# List recent deployments
vercel ls --format json --scope <team-slug>
# Inspect a specific deployment
vercel inspect <deployment-url>
# View build logs (requires Vercel CLI v35+)
vercel inspect <deployment-url> --logs
# View runtime request logs (follows live by default; add --no-follow for a one-shot snapshot)
vercel logs <deployment-url>
# List domains
vercel domains ls --scope <team-slug>
# Add a domain to the project — linked or env-linked directory (1 arg)
vercel domains add <domain> --scope <team-slug>
# Add a domain — unlinked directory (requires <project> positional)
vercel domains add <domain> <project> --scope <team-slug>
stripe projects status --json to confirm the Vercel resource's local name. The examples below assume the default (vercel-plan); substitute the actual name if it was renamed at stripe projects add time.stripe projects add vercel/pro (or stripe projects upgrade vercel-plan pro)stripe projects downgrade vercel-plan hobbyVERCEL_TOKEN as a --token flag. Export it as an environment variable and let the CLI read it natively..env files first..vercel/ files directly. The CLI manages this directory. Reading them (e.g. to verify orgId) is fine.--format json when structured output will help with follow-up steps.-y on commands that prompt for confirmation to avoid interactive blocking..env files present:printenv | grep -i vercel
grep -i vercel .env 2>/dev/null
Authentication required:vercel whoami (uses VERCEL_TOKEN from environment).vercel whoami --scope <team-slug>
vercel inspect <deployment-url> --logs
package.json is complete and committed.vercel env add.vercel.json. Vercel auto-detects frameworks (Next.js, Remix, Vite, etc.) from package.json; override with vercel.json if detection is wrong.npm install -g vercel