Published 2026-09-21 · Tested 2026-08-20

Vapi

B-

Vapi received 11 PASS votes and passed 4 of five agent surface checks. The clearest finding came from the verify a server event 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 Vapi’s public documentation independently and attempted five first-hour developer jobs: make the first phone call, find the exact limits, recover a provider-rate-limited call, verify a server event, use the TypeScript server 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. Preflight substitutions: T3: A provider rate-limit call failure replaces a direct Vapi HTTP 429.

Freshness

How rechecks work
Category
Voice & speech
Tested
Quotes verified
Surface rechecked

No change since the test.

4 of 5 quoted passages still appear on the live pages. The quoted page changed for Find the exact limits.

Vapi Fern · published
B-

81.2% · 65/80 · AI Agent Readiness Score · reading 30 pts · surface 50 pts

llms.txt PASS
llms-full.txt FAIL
markdown mirror PASS
MCP server PASS
docs AI PASS
Task GPT 5.6 SolOpus 5DeepSeek v4F Consensus
Make the first phone call PASSPARTIALPASS PASS
Find the exact limits PASSPASSPARTIAL PASS
Recover a provider-rate-limited call PASSPASSPASS PASS
Verify a server event FAILPARTIALPASS SPLIT
Use the TypeScript server SDK PASSPASSPASS PASS

docs platform: Fern (unscored) · verified 2026-08-20

What to fix first

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

  1. 1
    +10 points llms-full.txt check failed

    Found: HTTP 301 redirects to llms.txt, so no separate full corpus exists.

    Fix: Publish llms-full.txt at the docs root with the full text of every docs page in one plain-text file.

    Evidence: docs.vapi.ai/llms-full.txt (opens in a new tab)

  2. 2
    +3 points Verify a server event SPLIT

    Found: The Server Authentication page lists the HMAC settings but not the string Vapi signs or how to recompute the digest. GPT also found no timestamp handling.

    Fix: Define the signed string, digest encoding, and timestamp check on the Server Authentication page, with receiver code that uses them.

    Evidence: docs.vapi.ai/server-url/server-authentication (opens in a new tab)

What the docs get right

  • Recover a provider-rate-limited call: 3 PASS votes. The ended-reason table identifies both provider 429 patterns, their cause, and two direct corrections.
  • Use the TypeScript server SDK: 3 PASS votes. The quickstart covers installation, token authentication, and REST-matching creation; the canonical API-reference fetch exceeded the tool's 5 MB limit.
  • 4 of 5 agent surface checks. Present: llms.txt, markdown mirrors, an MCP server, docs AI. Missing: llms-full.txt.

Make the first phone call

PASS

PASS consensus from 2 PASS, 1 PARTIAL.

One dashboard sequence creates and publishes an assistant, connects a free number, and starts inbound or outbound calls. The Dashboard path is complete and unambiguous end to end, but the TypeScript tab on the same page places the outbound call with a nested "assistant: { assistantId: 'your-assistant-id' }" payload while the Web quickstart and the Create Call API reference both use a top-level assistantId, so the code path an agent copies contradicts the reference. Four sequential sections (Create an assistant, Connect a phone number, Test an inbound call, Test an outbound call) give a single unambiguous path from zero through inbound and outbound calls.

Find the exact limits

PASS

PASS consensus from 2 PASS, 1 PARTIAL.

One guide states 10 default slots, defines three subscriptionLimits fields, and explains custom, add-on, and enterprise capacity. One page gives the default value, the three subscriptionLimits fields (concurrencyBlocked, concurrencyLimit, remainingConcurrentCalls) with per-field definitions, the org-level scope, the dashboard control that raises reserved capacity, and the 50,000 minutes per month threshold that moves an account to custom or add-on plans. The default concurrency (10) and the subscriptionLimits fields (concurrencyBlocked, concurrencyLimit, remainingConcurrentCalls) are documented. But plan-dependent capacity rules beyond 'Enterprise plans can include unlimited concurrency' are absent, no intermediate-plan tier limits are stated, and API request rate limits are only shown as a read-only dashboard field without documented values.

Recover a provider-rate-limited call

PASS

PASS consensus from 3 PASS.

The ended-reason table identifies both provider 429 patterns, their cause, and two direct corrections. The ended-reason page names the exact code, explains that the status code embedded in the reason string identifies the failing provider layer, distinguishes BYOK credential or quota faults from Vapi platform faults, and the troubleshooting page adds the durable correction of configuring fallback transcriber, voice, and model providers so a non-fatal error swaps providers instead of ending the call. The docs identify the specific error patterns for provider rate-limit/quota (429/exceeded-quota) with a clear correction path: upgrade provider plan/reduce volume, and configure fallback providers for resilience.

Verify a server event

SPLIT

SPLIT consensus from 1 PASS, 1 PARTIAL, 1 FAIL.

The docs configure HMAC credentials but never define signed bytes, signature encoding, timestamp handling, or receiver verification code. Setting the Server URL and receiving the status-update payload are fully documented, but the HMAC section only lists the dashboard fields to fill in (Secret Key, Algorithm, Signature Header, Timestamp Header, Payload Format) and never states what string Vapi signs, what the Payload Format choices are, or how to recompute the digest, and the only verification code in the docs is a middleware named verifyVapiSignature that is referenced without ever being defined. The complete process is documented: create an HMAC credential in the dashboard (server-authentication page), reference it via credentialId, receive status-update events at the server URL (events page), and verify the HMAC signature with a production-quality TypeScript example using timingSafeEqual.

Use the TypeScript server SDK

PASS

PASS consensus from 3 PASS.

The quickstart covers installation, token authentication, and REST-matching creation; the canonical API-reference fetch exceeded the tool's 5 MB limit. Install, client construction, and assistant creation are all shown, and the SDK snippet is field-for-field identical to the cURL REST body on the same page (name, model.provider, model.model, model.messages, voice.provider, voice.voiceId, firstMessage). Installation, client authentication, and a create-assistant example are all on one page with tabbed code panels for TypeScript, Python, Java, Ruby, C#, and Go. The assistant-creation example sets name, firstMessage, model, and voice, matching the REST API shape exactly.

The receipt

For maximum security, use HMAC signature-based authentication to verify request integrity.

The docs configure HMAC credentials but never define signed bytes, signature encoding, timestamp handling, or receiver verification code.

Agent surface notes

Initialize returned a valid MCP response with Fern Docs server information.

The live docs expose a public Ask AI control.

Show the score

AI Agent Readiness Score 81.2%, grade B-

Paste this into a readme:

[![AI Agent Readiness Score 81.2%](https://docsforagents.com/badge/vapi.svg)](https://docsforagents.com/reports/vapi-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 3 of five tasks. Quotes shown here were re-fetched and confirmed verbatim on 2026-08-20.

Read the full methodology

Put another docs site through the battery.

Nominate a docs site