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

Merge

C

Merge received 6 PASS votes and passed 4 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 Merge’s public documentation independently and attempted five first-hour developer jobs: make the first HRIS request, find the exact limits, recover from an invalid request, verify a model 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. Preflight substitutions: T3: A documented request-shape error replaced HTTP 429 because it is Merge's clearest write-recovery path.

Freshness

How rechecks work
Tested
Quotes verified
Surface rechecked

No change since the test.

5 of 5 quoted passages still appear on the live pages.

Merge Fern · published
C

76.2% · 61/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 HRIS request PASSPARTIALPASS PASS
Find the exact limits PARTIALPARTIALPARTIAL PARTIAL
Recover from an invalid request PARTIALPARTIALPASS PARTIAL
Verify a model webhook PASSPASSPASS PASS
Use the Node SDK PARTIALPARTIALPARTIAL PARTIAL

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

What to fix first

These 4 fixes could add up to 18 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: The URL redirects to the short llms.txt index, not a full documentation corpus.

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

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

  2. 2
    +3 points Find the exact limits PARTIAL

    Found: The rate limits page says some endpoints may have different limits but lists none of them.

    Fix: List every endpoint with a nonstandard rate limit on the rate limits page, including the async polling limit.

    Evidence: docs.merge.dev/merge-unified/hris/merge-api-basics/rate-limits (opens in a new tab)

  3. 3
    +3 points Use the Node SDK PARTIAL

    Found: The SDKs page pagination loop omits await, and the Pagination page uses an older callback-style Node client.

    Fix: Add await to the SDKs page pagination loop, and rewrite the Pagination page examples with the same MergeClient calls.

    Evidence: docs.merge.dev/merge-unified/hris/merge-api-basics/sdks (opens in a new tab)

  4. 4

    Found: In the panel's reading, the INVALID_REQUEST_SHAPE row does not link the Writes guide. The Debug Mode example also uses GET after the text says POST.

    Fix: Link the INVALID_REQUEST_SHAPE row to the Writes guide body format, and use one HTTP method in the Debug Mode section.

    Evidence: docs.merge.dev/merge-unified/writing-data/troubleshooting-writes/warnings-and-errors-reference (opens in a new tab)

What the docs get right

  • Verify a model webhook: 3 PASS votes. One page covers Dashboard creation, Common Model event selection, test delivery, payload receipt, raw-body signature verification, and log visibility.
  • Make the first HRIS request: 2 PASS votes. The quickstart gives one ordered path from test Linked Account creation through token copying to the authenticated Employees request.
  • 4 of 5 agent surface checks. Present: llms.txt, markdown mirrors, an MCP server, docs AI. Missing: llms-full.txt.

Make the first HRIS request

PASS

PASS consensus from 2 PASS, 1 PARTIAL.

The quickstart gives one ordered path from test Linked Account creation through token copying to the authenticated Employees request. Creating the test Linked Account and copying the Account Token are unambiguous, but the Quickstart's request step is an interactive widget whose curl never appears in the .md mirror Merge tells agents to use, and the nearest static curl at https://docs.merge.dev/merge-unified/hris/overview omits the /v1 path segment and returns HTTP 404 when run. The Quickstart provides a single unambiguous walkthrough: create a test Linked Account from the Dashboard, copy the Account Token, and call GET /hris/v1/employees with two headers.

Find the exact limits

PARTIAL

PARTIAL consensus from 3 PARTIAL.

The three tier values match across HRIS and ATS, but the overview neither lists nor links the 1-request-per-10-seconds async polling exception. Launch 100/minute, Professional 400/minute, and Enterprise 600/minute per Linked Account are stated identically on the rate-limits page and all eight category overviews with zero numeric drift, but the promised per-endpoint exceptions are never enumerated: the passthrough, sync-status, force-resync, and employees list reference pages state no rate limit at all. The three plan-tier quotas (Launch 100/min, Professional 400/min, Enterprise 600/min) are stated clearly and consistently across pages, but the docs acknowledge endpoint exceptions exist without enumerating them, forcing an agent to cross-reference every endpoint's individual page to find exceptions.

Recover from an invalid request

PARTIAL

PARTIAL consensus from 1 PASS, 2 PARTIAL.

Recovery requires the error table, Writes guide, /meta guide, and Debug Mode guide, whose sample uses GET after the text specifies a POST request. Recovery is reachable but requires three pages and one guess: this identical description is given for both INVALID_REQUEST_SHAPE and INVALID_REQUEST_CONTENT_TYPE with different fixes, the correct model-wrapped body shape lives on a separate Writes page that the error row does not link to, and the Debug Mode section instructs a POST query parameter while its own example shows a GET. The error reference page documents INVALID_REQUEST_SHAPE with a clear cause and fix. The companion /meta endpoint documentation shows how to discover the expected request shape dynamically. The error reference also documents the adjacent header error (INVALID_REQUEST_CONTENT_TYPE) and its fix. Together these form a complete recovery path.

Verify a model webhook

PASS

PASS consensus from 3 PASS.

One page covers Dashboard creation, Common Model event selection, test delivery, payload receipt, raw-body signature verification, and log visibility. One page carries the whole loop end to end: the dashboard path to create the hook, the Common Model sync and changed-data event types, the Send test POST request button, a full sample payload, an Express verify hook that captures the raw body before JSON parsing, base64url conversion, timing-safe comparison, and the webhook log view for confirmation. The webhook documentation covers the complete lifecycle: configuring a Common Model webhook endpoint in the Dashboard, using 'Send test POST request' to trigger a sample payload, and verifying X-Merge-Webhook-Signature with HMAC-SHA256 and base64url encoding. Working code examples in Python, Ruby, and Node.js are provided.

Use the Node SDK

PARTIAL

PARTIAL consensus from 3 PARTIAL.

The Node guide initializes and lists correctly, but its pagination assignment omits await while the separate pagination guide uses a legacy client shape. The SDKs page matches the API guidance by passing the returned next value into the cursor argument of merge.hris.employees.list, but the canonical Pagination page contradicts it with a superseded callback-style client, its Python sample passes the cursor as next= instead of cursor=, and the SDKs page's own pagination loop omits await so the reassigned value is a Promise whose .next is undefined. The docs.merge.dev SDK page shows only Python examples inline; Node.js/TypeScript initialization and pagination code lives on the linked GitHub repo README, not in the docs site. An agent must follow the external link and the patterns match the API guidance, but the primary documentation does not contain a complete Node.js walkthrough.

The receipt

Launch: 100 / minute (per Linked Account) Professional: 400 / minute (per Linked Account) Enterprise: 600 / minute (per Linked Account)

The three tier values match across HRIS and ATS, but the overview neither lists nor links the 1-request-per-10-seconds async polling exception.

Agent surface notes

Initialize returned JSON-RPC protocol 2025-03-26 and Fern docs server information.

The live docs expose a public Ask AI control.

Show the score

AI Agent Readiness Score 76.2%, grade C

Paste this into a readme:

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

Read the full methodology

Put another docs site through the battery.

Nominate a docs site