Published 2026-09-21 · Tested 2026-08-19
Unstructured
AUnstructured received 12 PASS votes and passed 5 of five agent surface checks. The clearest finding came from the transform a document task.
Three AI models, GPT 5.6 Sol, Claude Opus 5, and DeepSeek v4 Flash, each read Unstructured’s public documentation independently and attempted five first-hour developer jobs: transform a document, find the exact limits, recover from throttling, verify a job webhook, use the Python 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- Category
- Data pipelines & documents
- Tested
- Quotes verified
- Surface rechecked
No change since the test.
3 of 5 quoted passages still appear on the live pages. The quoted page changed for Transform a document and Use the Python SDK.
96.2% · 77/80 · AI Agent Readiness Score · reading 30 pts · surface 50 pts
Agent surface checks · 50/50
The Reading Test
| Task | GPT 5.6 Sol | Opus 5 | DeepSeek v4F | Consensus |
|---|---|---|---|---|
| Transform a document | PARTIAL | PARTIAL | PASS | PARTIAL |
| Find the exact limits | PASS | PASS | PASS | PASS |
| Recover from throttling | PASS | PASS | PASS | PASS |
| Verify a job webhook | PASS | PASS | PASS | PASS |
| Use the Python SDK | PARTIAL | PASS | PASS | PASS |
docs platform: Mintlify (unscored) · verified 2026-08-19
What to fix first
This fix could add up to 2 points to the AI Agent Readiness Score. The list ranks each fix by the points it would add. How the ranking works
- 1
Found: The quickstart sets UNSTRUCTURED_API_URL ending in /api/v1, while the REST job reference pages append /api/v1 again.
Fix: Use one UNSTRUCTURED_API_URL convention, with or without /api/v1, in the quickstart and every REST reference example.
Evidence: docs.unstructured.io/
api-reference/ quickstart/ overview (opens in a new tab)
What the docs get right
- Find the exact limits: 3 PASS votes. Four quickstarts and the Pipeline API overview all state 10 files, 50 MB, one second, and five running jobs.
- Recover from throttling: 3 PASS votes. The quickstart links rapid successive launches to the error and requires at least one second between requests.
- 5 of 5 agent surface checks. Present: llms.txt, llms-full.txt, markdown mirrors, an MCP server, docs AI.
Transform a document
PARTIALPARTIAL consensus from 1 PASS, 2 PARTIAL.
The quickstart gives a complete flow, but the create-job reference appends /api/v1 to a variable that already ends with /api/v1. The quickstart alone is a complete, unambiguous three-step path with curl and Python tabs plus a full end-to-end script, but the REST reference pages for the same three calls compose the URL as "${UNSTRUCTURED_API_URL}/api/v1/jobs/" while the quickstart and Pipelines overview define that variable as already ending in /api/v1 and call "$UNSTRUCTURED_API_URL/jobs/", so cross-referencing yields a doubled /api/v1/api/v1 path. The quickstart provides three numbered steps (create, poll, download) plus a standalone end-to-end script in both curl and Python, forming one unambiguous path from zero to downloaded JSON.
Find the exact limits
PASSPASS consensus from 3 PASS.
Four quickstarts and the Pipeline API overview all state 10 files, 50 MB, one second, and five running jobs. All four limits (10 files, 50 MB, one second between launches, five concurrent jobs) sit in one callout and are repeated byte-identically on five pages, and the Transform MCP get-started pages restate three of the four consistently with no contradicting value anywhere in the corpus. All four exact limits (10 files, 50 MB per file, 1-second interval, 5 concurrent jobs) appear together in a single note reused consistently across the quickstart and create-job pages.
Recover from throttling
PASSPASS consensus from 3 PASS.
The quickstart links rapid successive launches to the error and requires at least one second between requests. The exact cause and the exact waiting correction are stated in the same step that creates the job, though the dedicated rate-limiting troubleshooting page never names the one-second rule and the Errors page documents no HTTP 429 case at all. The docs identify the cause (launching jobs too rapidly) and give the exact correction (wait at least one second between launch requests) in the same sentence.
Verify a job webhook
PASSPASS consensus from 3 PASS.
The workflow endpoint documents channel creation and secrets, while the webhook page supplies the POST schema and raw-body verification code. The chain is complete end to end: the workflow-scoped channel endpoint documents the secret constraint of 24 to 75 bytes and its write-only behavior, the payload schema lists every field and which events carry it, and the Python verifier gives the header names, the "{msg_id}.{timestamp}.{raw_body}" signing string, base64 HMAC-SHA256, versioned v1 signature parsing, a 300-second tolerance, and a constant-time compare. The webhooks page provides a complete HMAC-SHA256 verification function (import hashlib, hmac, base64; reads webhook-id/webhook-timestamp/webhook-signature headers; signs '{msg_id}.{timestamp}.{raw_body}'; compares with hmac.compare_digest). Webhook creation is documented through both the Pipelines UI and the create-notification-channel API. Creating a workflow-scoped (job) webhook via the API requires inferring the request format from the workspace-scoped example.
Use the Python SDK
PASSPASS consensus from 2 PASS, 1 PARTIAL.
The end-to-end quickstart uses BodyCreateJob, but the create-job reference places request_data directly on CreateJobRequest. The official client is linked to its GitHub repo with a pinned install of unstructured-client>=0.30.6 and a documented server_url constructor parameter, and the quickstart's Python tab is a runnable minimum example whose jobs.create_job, jobs.get_job, and jobs.download_job_output calls map cleanly onto POST /jobs/, GET /jobs/{id}, and GET /jobs/{id}/download. The official SDK is 'unstructured-client' on PyPI. The Transform quickstart gives a complete create-poll-download Python example using client.jobs.create_job, client.jobs.get_job, and client.jobs.download_job_output, which match the REST API operations (POST /jobs/, GET /jobs/{id}, GET /jobs/{id}/download).
The receipt
This value should be https://platform-api.transform.unstructured.io/api/v1.
The quickstart gives a complete flow, but the create-job reference appends /api/v1 to a variable that already ends with /api/v1.
Agent surface notes
Initialize returned JSON-RPC protocol 2025-03-26 and server name Unstructured.
The live docs inject a public Kapa assistant widget.
Show the score
Paste this into a readme:
[](https://docsforagents.com/reports/unstructured-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.
Put another docs site through the battery.
Nominate a docs site