Published 2026-09-22 · Tested 2026-09-22

Vercel

B+

Vercel received 6 PASS votes and passed 5 of five agent surface checks. The clearest finding came from the find the exact limits task.

Panel: GPT 5.6 Sol, Opus 5, DeepSeek v4F Battery: v1 Read as markdown (opens in a new tab)

Three AI models, GPT 5.6 Sol, Claude Opus 5, and DeepSeek v4 Flash, each read Vercel’s public documentation independently and attempted five first-hour developer jobs: deploy the first project, find the exact limits, recover from a 429, verify a webhook, use the TypeScript SDK.

No accounts, API calls, or code execution were used. Every verdict came from public pages and every published quotation passed a live verification check.

Freshness

How rechecks work
Tested
Quotes verified
Surface rechecked
Not yet rechecked
Vercel Custom Next.js · published
B+

88.8% · 71/80 · AI Agent Readiness Score · reading 30 pts · surface 50 pts

llms.txt PASS
llms-full.txt PASS
markdown mirror PASS
MCP server PASS
docs AI PASS
Task GPT 5.6 SolOpus 5DeepSeek v4F Consensus
Deploy the first project PARTIALPARTIALPASS PARTIAL
Find the exact limits PARTIALPARTIALPASS PARTIAL
Recover from a 429 PARTIALPARTIALPARTIAL PARTIAL
Verify a webhook PARTIALPASSPASS PASS
Use the TypeScript SDK PASSPARTIALPASS PASS

docs platform: Custom Next.js (unscored) · verified 2026-09-22

What to fix first

These 3 fixes could add up to 7 points to the AI Agent Readiness Score. The list ranks each fix by the points it would add. How the ranking works

  1. 1
    +3 points Recover from a 429 PARTIAL

    Found: The REST API errors page names rate_limited but never states the 429 status or a retry step, and the dynamic-quota section calls the same code rate_limit_exceeded.

    Fix: State the 429 status on the REST API errors page, name one error code in both it and the dynamic-quota section, and document the retry wait.

    Evidence: vercel.com/docs/rest-api/errors (opens in a new tab)

  2. 2
    +2 points Deploy the first project PARTIAL

    Found: The getting-started page installs the CLI with npm i -g vercel in its agent prompt and npm i vercel in its numbered install step.

    Fix: Use the same install command in the agent prompt and the numbered step on the getting-started page, and match it on the CLI overview.

    Evidence: vercel.com/docs/getting-started-with-vercel (opens in a new tab)

  3. 3
    +2 points Find the exact limits PARTIAL

    Found: The limits page lists Enterprise deployments per day as 24000 in one table and Custom in another, and gives Domains retrieval per minute as both 200 and 500.

    Fix: Reconcile the two Enterprise deployments-per-day values on the limits page, and label each duplicated Domains retrieval row with the case it covers.

    Evidence: vercel.com/docs/limits (opens in a new tab)

What the docs get right

  • Verify a webhook: 2 PASS votes. The path runs end to end without guessing: create the webhook and capture the one-time secret, receive a typed event payload, read x-vercel-signature, and compare an HMAC-SHA1 of the raw body using crypto.timingSafeEqual.
  • Use the TypeScript SDK: 2 PASS votes. The page installs @vercel/sdk, initializes Vercel with VERCEL_TOKEN, and maps GET /v10/projects?limit=1 to vercel.projects.getProjects({ limit: '1' }).
  • 5 of 5 agent surface checks. Present: llms.txt, llms-full.txt, markdown mirrors, an MCP server, docs AI.

Deploy the first project

PARTIAL

PARTIAL consensus from 1 PASS, 2 PARTIAL.

The agent prompt gives a global npm path, but the page body and CLI overview instead show npm i vercel, so installation is not one consistent path. The step sequence is clear, but the same page tells the agent to run npm i -g vercel in its agent prompt and npm i vercel in its numbered install step, so the CLI lands globally or locally depending on which block is read. The main docs page and the getting-started page both present the identical three-command flow. The CLI detects the framework, builds, and deploys. Production promotion uses the --prod flag. No guessing required.

Find the exact limits

PARTIAL

PARTIAL consensus from 1 PASS, 2 PARTIAL.

The rate-limit table gives plan values and scopes, but the general table says Enterprise deployments per day are Custom rather than 24000. Every rate limit carries an explicit limit, duration and scope, but the table repeats several descriptions verbatim with different values, so Domains retrieval per minute reads 200 in one row and 500 in the next with no way to tell which applies. The REST API page names the three rate-limit response headers and links to the limits page, which lists per-endpoint rate limits (limit per window) and deployment quotas per plan (Free/Pro/Enterprise). All values and scopes are consistent across the table.

Recover from a 429

PARTIAL

PARTIAL consensus from 3 PARTIAL.

The error reference names rate_limited and returns reset timestamps, but the quickstart calls the 429 platform-wide and the dynamic-quota section names rate_limit_exceeded. The REST API error page names the rate_limited code and returns a reset epoch an agent can wait on, but it never states the HTTP status is 429, never mentions retry-after, and the 67 429 responses in the OpenAPI description carry empty description strings. The errors page names the 'Rate limited' condition and explains it is per-endpoint, and the REST API page documents the three response headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset). However, the docs never state the HTTP 429 status code explicitly, never mention a Retry-After header, and provide no retry or backoff guidance. An agent can detect the condition but cannot reach a complete correction from the docs alone.

Verify a webhook

PASS

PASS consensus from 2 PASS, 1 PARTIAL.

The setup, payload schema, raw-body HMAC, and constant-time comparison are documented, but the linked App Router validator exports GET while delivery uses POST. The path runs end to end without guessing: create the webhook and capture the one-time secret, receive a typed event payload, read x-vercel-signature, and compare an HMAC-SHA1 of the raw body using crypto.timingSafeEqual. The process is complete: create a webhook via Settings > Webhooks, select events and scope, supply an endpoint URL, receive a secret key shown once, then verify every incoming request by computing HMAC-SHA1 of the raw body with the secret and comparing it to the x-vercel-signature header. Both the webhooks page and request-headers page document this end-to-end.

Use the TypeScript SDK

PASS

PASS consensus from 2 PASS, 1 PARTIAL.

The page installs @vercel/sdk, initializes Vercel with VERCEL_TOKEN, and maps GET /v10/projects?limit=1 to vercel.projects.getProjects({ limit: '1' }). Every endpoint page carries a complete authenticated example using new Vercel({ bearerToken }) and the SDK method maps onto the same GET /v7/deployments route the REST reference lists, but the page's own install it link points at an anchor that does not exist and no install command appears anywhere on it. The SDK docs provide install (pnpm i @vercel/sdk) and a complete authentication example using a bearer token. This matches the REST API authentication form (Authorization: Bearer <TOKEN>). The SDK methods map one-to-one to REST API endpoints, and the grouping is consistent.

The receipt

| Deployments per day (Free). | 100 | 86400 | owner | | Deployments per day (Pro). | 6000 | 86400 | owner | | Deployments per day (Enterprise). | 24000 | 86400 | owner |

The rate-limit table gives plan values and scopes, but the general table says Enterprise deployments per day are Custom rather than 24000.

Agent surface notes

Initialize returned HTTP 401 with WWW-Authenticate Bearer and resource_metadata naming the resource Vercel MCP.

Clicking the docs Ask AI control opened an in-house chat panel with an "Ask a question..." input.

Show the score

AI Agent Readiness Score 88.8%, grade B+

Paste this into a readme:

[![AI Agent Readiness Score 88.8%](https://docsforagents.com/badge/vercel.svg)](https://docsforagents.com/reports/vercel-docs-ai-agent-readiness/)

Method note

This is a reading test of public documentation, not an execution test. No accounts were created and no API calls were run. The AI Agent Readiness Score counts fifteen reading votes at PASS 2, PARTIAL 1, and FAIL 0, for 30 possible points. Five agent surface checks add 10 points each. The total is 80. Consensus chips show each row majority and do not affect scoring. The panel split on 4 of five tasks. Quotes shown here were re-fetched and confirmed verbatim on 2026-09-22.

Read the full methodology

Put another docs site through the battery.

Nominate a docs site