Published 2026-09-21 · Tested 2026-08-19
Stream
D+Stream received 10 PASS votes and passed 3 of five agent surface checks. The clearest finding came from the find the exact limits task.
Three AI models, GPT 5.6 Sol, Claude Opus 5, and DeepSeek v4 Flash, each read Stream’s public documentation independently and attempted five first-hour developer jobs: send the first chat message, find the exact limits, recover from error code 4, verify a chat webhook, use the React 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 documented API error replaced HTTP 429 because it provides the clearest common recovery path.
Freshness
How rechecks work- Category
- Email & messaging
- Tested
- Quotes verified
- Surface rechecked
No confirmed change since the test.
5 of 5 quoted passages still appear on the live pages.
68.8% · 55/80 · AI Agent Readiness Score · reading 30 pts · surface 50 pts
Agent surface checks · 30/50
The Reading Test
| Task | GPT 5.6 Sol | Opus 5 | DeepSeek v4F | Consensus |
|---|---|---|---|---|
| Send the first chat message | PARTIAL | PASS | PASS | PASS |
| Find the exact limits | PASS | PARTIAL | PARTIAL | PARTIAL |
| Recover from error code 4 | PASS | PASS | PASS | PASS |
| Verify a chat webhook | PASS | PASS | PASS | PASS |
| Use the React SDK | PARTIAL | PARTIAL | PASS | PARTIAL |
docs platform: Custom Next.js (unscored) · verified 2026-08-19
What to fix first
These 4 fixes could add up to 24 points to the AI Agent Readiness Score. The list ranks each fix by the points it would add. How the ranking works
- 1 +10 points llms-full.txt check failed
Found: HTTP 404 at the tested site and product roots.
Fix: Publish llms-full.txt at the docs root with the full text of every docs page in one plain-text file.
Evidence: getstream.io/
chat/ llms-full.txt (opens in a new tab) - 2 +10 points MCP server check failed
Found: Initialize returned an HTTP 403 CDN response, not a valid MCP response.
Fix: Run a public MCP server for the docs that answers a JSON-RPC initialize call and offers a docs search tool.
- 3
Found: The platform page scopes the 60-per-minute user limit per endpoint and platform. In the panel's reading, the Chat page scopes it per user.
Fix: State one counting scope for the 60-per-minute user limit, and use it on the platform and Chat rate-limit pages.
Evidence: getstream.io/
docs/ platform/ rate-limits (opens in a new tab) - 4
Found: The React introduction imports dist/css/v2/index.css, but the tutorial omits /v2 and the installation page says to remove it. In the panel's reading, the install commands also differ.
Fix: Use one install command and one stylesheet import path across the React introduction, tutorial, and installation page.
Evidence: getstream.io/
chat/ sdk/ react/ tutorial (opens in a new tab)
What the docs get right
- Recover from error code 4: 3 PASS votes. The error reference gives both causes and shows the server-side created_by_id correction for code 4.
- Verify a chat webhook: 3 PASS votes. The platform guide covers subscription, raw-body verification, deduplication, and exact retries; the Chat events page provides the JSON payload.
- 3 of 5 agent surface checks. Present: llms.txt, markdown mirrors, docs AI. Missing: llms-full.txt, an MCP server.
Send the first chat message
PASSPASS consensus from 2 PASS, 1 PARTIAL.
The introduction watches channelByMembers but sends through undefined channel, so the final call requires a variable-name inference. One page carries the whole path (getInstance, connectUser, client.channel, watch, sendMessage), but its channel snippet binds channelById and channelByMembers while the message snippet calls channel.sendMessage on an undefined channel variable. The React getting-started page gives a complete linear path: install packages, init client via singleton pattern, connect user, create channel with client.channel(), watch with channel.watch(), and send a message with channel.sendMessage(), all in one page with no gaps.
Find the exact limits
PARTIALPARTIAL consensus from 1 PASS, 2 PARTIAL.
Both limit pages agree on Connect 10,000, Send Message 1,000, and 60 user requests per endpoint and platform. Connect is 10,000/min and Send Message is 1,000/min per platform, but the per-user 60/min cap is scoped two different ways in the docs, so the counting scope is not consistent. The platform rate-limits page clearly documents Connect at 10,000/min and the 60 req/min per-user cap with counting scopes (App-level per endpoint+platform; User-level per user per endpoint per platform). However, Chat-specific endpoint limits such as Send Message (1,000/min) and Get-or-Create Channel (10,000/min) are in the Chat-specific rate-limits page which is client-side rendered, so the table cannot be extracted via readable fetch. An agent must use the getRateLimits API or cross-reference the platform summary.
Recover from error code 4
PASSPASS consensus from 3 PASS.
The error reference gives both causes and shows the server-side created_by_id correction for code 4. The page names both causes, the three calls that trigger it (channel.watch, channel.create, channel.query), and gives runnable server-side fix code that passes created_by_id. The API Error Codes page has a dedicated 'GetOrCreateChannel failed' subsection that identifies the error, gives stream code 4, explains both causes (watching a non-existent channel; missing created_by_id on server-side creation), and provides code showing the fix: pass created_by_id in the channel data object when creating server-side.
Verify a chat webhook
PASSPASS consensus from 3 PASS.
The platform guide covers subscription, raw-body verification, deduplication, and exact retries; the Chat events page provides the JSON payload. Configuration via event_hooks, the X-Signature HMAC header, the raw-body requirement, the message.new JSON payload on the chat events page, and an exact retry table (5 attempts, 6s per attempt, 15s total) are all documented. The webhooks documentation covers the complete lifecycle: configuring event_hooks with message.new via updateAppSettings, handler requirements (POST/JSON/2xx/idempotent/HTTPS), signature verification via verifyAndParseWebhook (or manual HMAC-SHA256), retry behavior (5 attempts, 6s timeout, 15s total), deduplication via X-Webhook-Id, payload compression, and even debugging with ngrok.
Use the React SDK
PARTIALPARTIAL consensus from 1 PASS, 2 PARTIAL.
The tutorial renders one channel with a connected user, but it conflicts with the introduction's stylesheet import path. The minimal example connects a user with useCreateChatClient and renders a channel, but the two React entry points disagree on the install command and on the stylesheet path, so the setup step needs reconciling before the example runs. The React SDK docs provide a clear end-to-end path: installation (npm install stream-chat stream-chat-react), CSS import, client init, user connection, channel creation, and the minimal UI render of Chat > Channel > MessageList + MessageComposer. The Chat and Channel component pages both document the same minimal rendering pattern with code examples.
The receipt
Each user is limited to 60 requests per minute per endpoint and platform. This prevents a single user from consuming your entire application quota. Your server is not subject to user rate limits.
Both limit pages agree on Connect 10,000, Send Message 1,000, and 60 user requests per endpoint and platform.
Agent surface notes
Initialize returned an HTTP 403 CDN response, not a valid MCP response.
The live docs expose a public Ask AI control.
Show the score
Paste this into a readme:
[](https://docsforagents.com/reports/stream-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-19.
Put another docs site through the battery.
Nominate a docs site