
Vercel
Run a stateful local Vercel REST API so you can develop and test deployments, domains, OAuth, env vars, and API keys without calling production Vercel.
Overview
vercel is an agent skill for the Build phase that runs a local, stateful Vercel REST API emulator so solo builders can test integrations without hitting the real Vercel API.
Install
npx skills add https://github.com/vercel-labs/emulate --skill vercelWhat is this skill?
- Stateful Vercel REST emulation with Vercel-style JSON and cursor-based pagination
- Start via `npx emulate --service vercel` or programmatic `createEmulator({ service: 'vercel' })` on port 4000
- Bearer auth, team scoping via `teamId` or `slug` query params, and `VERCEL_*` env overrides to point SDKs at localhost
- Covers user/team/projects/deployments/domains-style workflows described in SKILL.md for local OAuth and integration test
- Allowed tools: Bash for `npx emulate`, `emulate`, and `curl` against the local server
- Default emulator URL http://localhost:4000
- Vercel-style cursor-based pagination in responses
Adoption & trust: 82 installs on skills.sh; 1.3k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need realistic Vercel API behavior locally but calling production risks mistakes, quotas, and slow feedback loops.
Who is it for?
Indie devs building Vercel OAuth apps, deployment automation, or agent workflows that call Vercel endpoints and want curl- or SDK-driven tests on port 4000.
Skip if: Teams that only need one-click deploys to real Vercel with no custom API integration testing, or production incident response on live Vercel infra.
When should I use this skill?
User needs Vercel API locally, emulate/mock Vercel, test Vercel OAuth or integrations, or work with projects/deployments/domains without the real API.
What do I get? / Deliverables
A localhost Vercel-compatible API is running and your app or tests can use Bearer auth, team scoping, and env overrides to validate flows end-to-end before real deploys.
- Running local Vercel API emulator instance
- Verified curl or SDK calls against localhost with team scoping
Recommended Skills
Journey fit
Canonical shelf is Build → integrations because the skill exists to wire apps and agents to Vercel API behavior during implementation, not for go-to-market or ops monitoring. Emulation targets third-party platform APIs (projects, deployments, teams, protection bypass)—classic integration work before you ship to real Vercel.
How it compares
Use instead of pointing integration tests at api.vercel.com or hand-rolling incomplete fetch mocks that omit pagination and team scoping.
Common Questions / FAQ
Who is vercel for?
Solo and indie builders using Claude Code, Cursor, or Codex who integrate with Vercel’s REST API and want a faithful local emulator for dev and test.
When should I use vercel?
During Build integrations when you mock Vercel, test OAuth, manage env vars or API keys locally, or emulate projects and deployments before Ship-phase CI against real Vercel.
Is vercel safe to install?
Review the Security Audits panel on this Prism page and treat emulator tokens as test-only; the skill allows shell and network via npx/curl against your local server.
SKILL.md
READMESKILL.md - Vercel
# Vercel API Emulator Fully stateful Vercel REST API emulation with Vercel-style JSON responses and cursor-based pagination. ## Start ```bash # Vercel only npx emulate --service vercel # Default port # http://localhost:4000 ``` Or programmatically: ```typescript import { createEmulator } from 'emulate' const vercel = await createEmulator({ service: 'vercel', port: 4000 }) // vercel.url === 'http://localhost:4000' ``` ## Auth Pass tokens as `Authorization: Bearer <token>`. All endpoints accept `teamId` or `slug` query params for team scoping. ```bash curl http://localhost:4000/v2/user \ -H "Authorization: Bearer test_token_admin" ``` Team-scoped requests resolve the account from the `teamId` or `slug` query parameter. User-scoped requests resolve the account from the authenticated user. ## Pointing Your App at the Emulator ### Environment Variable ```bash VERCEL_EMULATOR_URL=http://localhost:4000 ``` ### Vercel SDK / Custom Fetch ```typescript const VERCEL_API = process.env.VERCEL_EMULATOR_URL ?? 'https://api.vercel.com' const res = await fetch(`${VERCEL_API}/v10/projects`, { headers: { Authorization: `Bearer ${token}` }, }) ``` ### OAuth URL Mapping | Real Vercel URL | Emulator URL | |-----------------|-------------| | `https://vercel.com/integrations/oauth/authorize` | `$VERCEL_EMULATOR_URL/oauth/authorize` | | `https://api.vercel.com/login/oauth/token` | `$VERCEL_EMULATOR_URL/login/oauth/token` | | `https://api.vercel.com/login/oauth/userinfo` | `$VERCEL_EMULATOR_URL/login/oauth/userinfo` | ### Auth.js / NextAuth.js ```typescript { id: 'vercel', name: 'Vercel', type: 'oauth', authorization: { url: `${process.env.VERCEL_EMULATOR_URL}/oauth/authorize`, }, token: { url: `${process.env.VERCEL_EMULATOR_URL}/login/oauth/token`, }, userinfo: { url: `${process.env.VERCEL_EMULATOR_URL}/login/oauth/userinfo`, }, clientId: process.env.VERCEL_CLIENT_ID, clientSecret: process.env.VERCEL_CLIENT_SECRET, profile(profile) { return { id: profile.sub, name: profile.name, email: profile.email, image: profile.picture, } }, } ``` ## Seed Config ```yaml tokens: test_token_admin: login: admin scopes: [] vercel: users: - username: developer name: Developer email: dev@example.com teams: - slug: my-team name: My Team description: Engineering team projects: - name: my-app team: my-team framework: nextjs buildCommand: next build outputDirectory: .next rootDirectory: null nodeVersion: "20.x" envVars: - key: DATABASE_URL value: postgres://localhost/mydb type: encrypted target: [production, preview] integrations: - client_id: oac_abc123 client_secret: secret_abc123 name: My Vercel App redirect_uris: - http://localhost:3000/api/auth/callback/vercel ``` ## Pagination Cursor-based pagination using `limit`, `since`, and `until` query params. Responses include a `pagination` object: ```bash curl "http://localhost:4000/v10/projects?limit=10" \ -H "Authorization: Bearer $TOKEN" ``` ## API Endpoints ### User & Teams ```bash # Registration check curl http://localhost:4000/registration # Authenticated user curl http://localhost:4000/v2/user -H "Authorization: Bearer $TOKEN" # Update user curl -X PATCH