# Courier docs: AI Agent Readiness Score 93.8% (A)

**93.8% · 75/80 · AI Agent Readiness Score · 25/30 reading points · 50/50 agent surface points**

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

- Tested: 2026-09-27
- Published: 2026-09-27
- Battery: v1
- Scoring: reading 30 pts · surface 50 pts
- Docs: https://www.courier.com/docs

Three AI models, GPT 5.6 Sol, Claude Opus 5, and DeepSeek v4 Flash, each read Courier’s public documentation independently and attempted five first-hour developer jobs: send the first message, find the exact limits, recover from a 429, verify a webhook, use the Node 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](https://docsforagents.com/methodology/#freshness)

- Category: [Email & messaging](https://docsforagents.com/grades/?category=messaging)
- Tested: 2026-09-27
- Quotes verified: 2026-09-27
- Surface rechecked: Not yet rechecked

## Agent surface checks · 50/50

| Check | Verdict | Points |
| --- | --- | --- |
| llms.txt | PASS | 10 |
| llms-full.txt | PASS | 10 |
| Markdown mirror | PASS | 10 |
| MCP server | PASS | 10 |
| Docs AI | PASS | 10 |

## The Reading Test · 25/30

| Task | GPT 5.6 Sol | Opus 5 | DeepSeek v4F | Consensus |
| --- | --- | --- | --- | --- |
| Send the first message | PASS | PARTIAL | PASS | PASS |
| Find the exact limits | PARTIAL | PARTIAL | PASS | PARTIAL |
| Recover from a 429 | PARTIAL | PARTIAL | PASS | PARTIAL |
| Verify a webhook | PASS | PASS | PASS | PASS |
| Use the Node SDK | PASS | PASS | PASS | PASS |

Docs platform: Mintlify (unscored) · verified 2026-09-27

## What to fix first

These 2 fixes could add up to 4 points to the AI Agent Readiness Score. The list ranks each fix by the points it would add. [How the ranking works](https://docsforagents.com/methodology/#what-to-fix-first)

1. **+2 points · Find the exact limits · PARTIAL**

   **Found:** Per-user, topic, and tenant send limits are described as a concept with no documented values, windows, or defaults.

   **Fix:** Add the default value, time window, and configuration location for each send-limit scope to the limits table.

   **Evidence:** [www.courier.com/docs/reference/api-overview](https://www.courier.com/docs/reference/api-overview)

2. **+2 points · Recover from a 429 · PARTIAL**

   **Found:** The 429 docs give X-RateLimit headers and idempotency keys, but no Retry-After or reset signal to time a retry.

   **Fix:** Document a retry-after or rate-limit reset header and a concrete backoff schedule for 429 responses.

   **Evidence:** [www.courier.com/docs/reference/api-overview](https://www.courier.com/docs/reference/api-overview)

## What the docs get right

- **Verify a webhook: 3 PASS votes.** The outbound guide covers creation and the whsec_ secret and hands off to the security page, which gives the header format, the <t>.<raw_body> signed payload, runnable Node verification code, and explicit warnings to hash the raw body and compare in constant time.
- **Use the Node SDK: 3 PASS votes.** The SDK quick start uses client.send.message({ message: ... }), matching the API reference's JavaScript request shape.
- **5 of 5 agent surface checks.** Present: llms.txt, llms-full.txt, markdown mirrors, an MCP server, docs AI.

## Send the first message

**PASS**

PASS consensus from 2 PASS, 1 PARTIAL.

The quickstart links the Test key, gives a complete POST /send request, and directs users to Test Logs. The quickstart gives a clean three-step path from Test key to a verified delivery timeline, but the docs state two different success status codes for POST /send, so an agent cannot write a correct success check. The quickstart walks from zero to a delivered message in three steps with a working code example for every major SDK.

## Find the exact limits

**PARTIAL**

PARTIAL consensus from 1 PASS, 2 PARTIAL.

The rate table is specific, but the old send-limits Markdown URL failed and current pages disagree on 1 MB versus 6 MB payload caps. Request-count limits and the 6 MB payload cap are stated exactly and consistently, but the per-user, topic, and tenant send limits are only described as a concept with no documented values, defaults, or configuration location. The rate-limit table and payload limits are identical on both the statuses and API overview pages.

## Recover from a 429

**PARTIAL**

PARTIAL consensus from 1 PASS, 2 PARTIAL.

The docs identify the cause and generic action but give no Retry-After or reset header for a complete retry decision. The docs name the cause, the affected endpoints with exact limits, the X-RateLimit-Limit and X-RateLimit-Remaining headers, and Idempotency-Key for safe retries, but no Retry-After or reset header and no backoff parameters, so an agent cannot compute how long to wait. The docs name the cause, the retry signal (429 + rate_limit_error), and the recovery path. The SDK retries 429s up to 2 times with exponential backoff.

## Verify a webhook

**PASS**

PASS consensus from 3 PASS.

The outbound guide covers dashboard setup and secret storage, while the security page provides matching raw-body HMAC verification code. The outbound guide covers creation and the whsec_ secret and hands off to the security page, which gives the header format, the <t>.<raw_body> signed payload, runnable Node verification code, and explicit warnings to hash the raw body and compare in constant time. The outbound webhooks guide links to the security page, which documents the full HMAC-SHA256 verification including splitting the courier-signature header, constant-time comparison, and requiring the raw body.

## Use the Node SDK

**PASS**

PASS consensus from 3 PASS.

The SDK quick start uses client.send.message({ message: ... }), matching the API reference's JavaScript request shape. The Node SDK page and the Send a message reference use the same constructor option apiKey, the same message wrapper around to and template, and the same response.requestId field, so the SDK example matches the API form. The SDK's client.send.message() parameter shape is the same message object that POST /send accepts in the API reference.

## The receipt

> Request bodies cap at 6 MB on all endpoints.

The rate table is specific, but the old send-limits Markdown URL failed and current pages disagree on 1 MB versus 6 MB payload caps.

- [www.courier.com/docs/reference/api-overview](https://www.courier.com/docs/reference/api-overview)

## Agent surface notes

Initialize returned JSON-RPC protocol 2025-06-18 and serverInfo name Courier version 1.0.0 (docs search/retrieval server, no key). A separate public API MCP server at https://mcp.courier.com also answers initialize with serverInfo @trycourier/courier-mcp version 1.3.7.

After hydration the docs header shows a Toggle assistant panel control; one click opened the Mintlify assistant panel with an Ask a question... input.

## 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-09-27.

Methodology: https://docsforagents.com/methodology/

Canonical URL: https://docsforagents.com/reports/courier-docs-ai-agent-readiness/
