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

ToolStatusWhat it does
read_urlLiveURL → clean Markdown + ReadScore + flags
score_urlLiveURL → ReadScore + flags only, no content
batchRoadmapMany URLs in one call
map_siteRoadmapDomain → crawlable outline
extract_dataRoadmapURL + schema → typed data

Read API Live

POST/api/v1/read

Fetch, extract (Mozilla Readability), and convert a URL to Markdown (Turndown), with a ReadScore attached. Requires bearer auth. 60 requests/min per key.

ParamTypeDescription
urlrequiredstringPage to read.
freshbooleanBypass the 10-minute in-memory cache.

Free scan & playground endpoints Live

POST/api/scan

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.

POST/api/read

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

SurfaceAuthLimit
/api/read, /api/scannone10 req/min per IP
/api/v1/read, /api/mcpbearer key60 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)