Quickstart Live
Two commands from zero to your first scored, agent-ready read.
1 · Get a key
Create an account and issue a key in the dashboard — the free tier includes 1,000 reads a month, no card required.
2 · Read a page
$ curl -X POST https://agentread.dev/api/v1/read \ -H "Authorization: Bearer $AGENTREAD_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com/pricing"}'
3 · Use the result
{
"url": "https://example.com/pricing",
"title": "Pricing",
"markdown": "# Pricing\n\n…",
"readScore": 82,
"hallucinationRisk": "low",
"flags": [],
"htmlBytes": 812000,
"markdownBytes": 8100,
"tokensBefore": 203114,
"tokensAfter": 1942,
"latencyMs": 84,
"cache": "MISS"
}Feed markdown to your model; branch on hallucinationRisk before you let an agent quote a price. These are the real field names the engine returns — not a simplified example.
Authentication Live
Bearer tokens, issued per account from the dashboard. Keys start with sk-ar-, are sha-256 hashed at rest, and are shown in full exactly once at creation.
Authorization: Bearer sk-ar-…
/api/v1/read and /api/mcp require this header and 401 without it. The free /api/read and /api/scanendpoints (used by this site's own Playground/ReadScan widgets) stay open, IP-rate-limited instead.
MCP server Live
A real remote MCP server (Streamable HTTP) — no local install, no npx package. Add it to any MCP-capable client with your API key as the bearer token:
{
"mcpServers": {
"agentread": {
"url": "https://agentread.dev/api/mcp",
"headers": { "Authorization": "Bearer sk-ar-…" }
}
}
}Exposed tools
| Tool | Status | What it does |
|---|---|---|
| read_url | Live | URL → clean Markdown + ReadScore + flags |
| score_url | Live | URL → ReadScore + flags only, no content |
| batch | Roadmap | Many URLs in one call |
| map_site | Roadmap | Domain → crawlable outline |
| extract_data | Roadmap | URL + schema → typed data |
Read API Live
Fetch, extract (Mozilla Readability), and convert a URL to Markdown (Turndown), with a ReadScore attached. Requires bearer auth. 60 requests/min per key.
| Param | Type | Description |
|---|---|---|
| urlrequired | string | Page to read. |
| fresh | boolean | Bypass the 10-minute in-memory cache. |
Free scan & playground endpoints Live
Score-only, no auth required — powers the homepage's free ReadScan tool. No markdown or raw HTML in the response, just the score and flags.
Full result (markdown + score + flags), no auth required, 10 requests/min per IP — powers this site's own Playground. Persists to your history if you're signed in.
Serve middleware Live
Humans get your site. Verified AI crawlers get the Markdown twin. No published npm package yet, so this is the real, copy-pasteable code rather than a fictional install command:
import { NextResponse, type NextRequest } from "next/server";
const AI_CRAWLERS = ["GPTBot", "ChatGPT-User", "ClaudeBot", "PerplexityBot", "CCBot", "Bytespider"];
export async function middleware(request: NextRequest) {
const ua = request.headers.get("user-agent") ?? "";
if (!AI_CRAWLERS.some((c) => ua.includes(c))) return NextResponse.next();
const res = await fetch("https://agentread.dev/api/v1/read", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AGENTREAD_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ url: request.url }),
});
if (!res.ok) return NextResponse.next();
const { markdown } = await res.json();
return new Response(markdown, { headers: { "content-type": "text/markdown" } });
}
export const config = { matcher: "/:path*" };This exact pattern (crawler UA detection → real distill → Markdown response) is what runs on agentread.dev itself, in src/proxy.ts.
How ReadScore is computed
Fully transparent — starts at 100, then deducts for: low payload reduction, high script count (>25 tags), price/CTA text present in raw HTML but absent from extracted text (JS-only rendering), disabled buy/checkout buttons in markup, lazy-loaded content, and a missing /llms.txt. Every deduction ships as a human-readable flag alongside the score — see src/lib/engine/read.ts for the exact logic.
Rate limits
| Surface | Auth | Limit |
|---|---|---|
| /api/read, /api/scan | none | 10 req/min per IP |
| /api/v1/read, /api/mcp | bearer key | 60 req/min per key |
Roadmap
Not built yet — listed here instead of documented as if callable today:
- MCP tools: batch, map_site, extract_data
- Crawl (whole-domain Markdown corpus)
- Watch (change-detection webhooks)
- llms.txt Studio (auto-generate & host llms.txt / llms-full.txt)
- Agent-traffic analytics dashboard
- Pay-per-crawl monetization for publishers
- Billing / Stripe integration
- Act — semantic agent transactions (long-term)