Card snapshot
readfetch.com
·
2026-10-29 01:37:15 UTC
·
8136349db6413514a68de0308a9eff157c6b70dc3b0822671b55dc3c7159f394
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"capabilities": {
"extensions": [
{
"description": "Every endpoint is paid with x402 (USDC on Base); an unpaid call answers 402 with the quote.",
"required": false,
"uri": "https://x402.org"
}
],
"pushNotifications": false,
"streaming": false
},
"defaultInputModes": [
"application/json"
],
"defaultOutputModes": [
"application/json"
],
"description": "Web reading for AI agents: readable text and site maps without a browser, browser rendering when JavaScript is required, and raw HTTP for everything else. Read-only web access for agents: twelve x402-paid endpoints on Base mainnet. Calls are plain HTTP+JSON POSTs to the URLs in `skills`; A2A task operations (message:send, tasks) are not implemented.",
"documentationUrl": "https://readfetch.com/SKILL.md",
"name": "readfetch.com",
"provider": {
"organization": "readfetch.com",
"url": "https://readfetch.com"
},
"securityRequirements": [
{
"x402": []
}
],
"securitySchemes": {
"x402": {
"description": "Sign the 402 quote and retry with PAYMENT-SIGNATURE. See /SKILL.md.",
"scheme": "x402",
"type": "http"
}
},
"skills": [
{
"description": "Fetch a public URL and return its main readable content as Markdown or plain text, plus title, author, published date and site name. Strips navigation, ads and boilerplate. No JavaScript rendering, so it costs a fraction of a browser scrape; use /v1/scrape when the content only appears after JavaScript runs.",
"examples": [
"https://example.com"
],
"id": "text",
"inputModes": [
"application/json"
],
"name": "text",
"outputModes": [
"application/json"
],
"tags": [
"readability",
"article extraction",
"html to text",
"html to markdown",
"web reader",
"content extraction",
"metadata",
"open graph",
"no javascript"
]
},
{
"description": "Discover a site's crawlable surface without crawling it: parse robots.txt allow/disallow rules, collect URLs from sitemap.xml and sitemap indexes, find RSS, Atom and JSON feeds, and count internal and external links on the homepage. Use the returned URLs to plan a /v1/scrape or /v1/crawl.",
"examples": [
"https://example.com"
],
"id": "map",
"inputModes": [
"application/json"
],
"name": "map",
"outputModes": [
"application/json"
],
"tags": [
"sitemap",
"robots.txt",
"rss",
"atom",
"feed discovery",
"url discovery",
"site map",
"crawl planning",
"link inventory"
]
},
{
"description": "JavaScript rendering and web scraping for agents: load a public URL in a real browser session, optionally scroll, wait for selectors, run JS, set headers, cookies or auth, and return Markdown, text or HTML with the page's links.",
"examples": [
"https://example.com"
],
"id": "scrape",
"inputModes": [
"application/json"
],
"name": "scrape",
"outputModes": [
"application/json"
],
"tags": [
"scrape",
"javascript rendering",
"browser rendering",
"markdown",
"html",
"spa",
"web scraping"
]
},
{
"description": "Identical request and response to /v1/scrape, but the render leaves through a rotating residential address instead of the datacentre. For targets that block by IP reputation (DataDome, PerimeterX, Cloudflare, AWS WAF). One attempt, no retries: residential bandwidth is the cost, and four times the scrape price is what it takes to cover it honestly.",
"examples": [
"https://example.com"
],
"id": "scrape-residential",
"inputModes": [
"application/json"
],
"name": "residential",
"outputModes": [
"application/json"
],
"tags": [
"residential proxy",
"protected sites",
"anti-bot",
"scrape",
"browser rendering"
]
},
{
"description": "Send an arbitrary HTTP request (GET, POST, PUT, PATCH, DELETE, HEAD) and return the response with status, headers and body, as text or base64. Intended for APIs, GraphQL, PDFs, byte ranges and large payloads where a browser is not needed.",
"examples": [
"https://example.com"
],
"id": "fetch",
"inputModes": [
"application/json"
],
"name": "fetch",
"outputModes": [
"application/json"
],
"tags": [
"http client",
"raw http",
"api calls",
"graphql",
"proxy"
]
},
{
"description": "Up to 50 URLs in one call and one payment. Results in input order; an undelivered page is not billed and is credited.",
"examples": [
"https://example.com"
],
"id": "batch",
"inputModes": [
"application/json"
],
"name": "batch",
"outputModes": [
"application/json"
],
"tags": [
"batch",
"bulk",
"multiple urls",
"concurrent",
"markdown"
]
},
{
"description": "Documents, not pages: page text plus one Markdown body, priced per document.",
"examples": [
"https://example.com/paper.pdf"
],
"id": "pdf",
"inputModes": [
"application/json"
],
"name": "pdf",
"outputModes": [
"application/json"
],
"tags": [
"pdf",
"document text",
"page text",
"markdown",
"metadata"
]
},
{
"description": "One heading or one selector instead of the whole page. A heading that is not found returns 200, an empty body and the list of headings that do exist.",
"examples": [
"https://example.com"
],
"id": "section",
"inputModes": [
"application/json"
],
"name": "section",
"outputModes": [
"application/json"
],
"tags": [
"section",
"heading",
"selector",
"tokens",
"docs"
]
},
{
"description": "Stateless change detection: send the hash you hold, get changed/unchanged and a bounded diff. A no-change answer is billable.",
"examples": [
"https://example.com"
],
"id": "diff",
"inputModes": [
"application/json"
],
"name": "diff",
"outputModes": [
"application/json"
],
"tags": [
"diff",
"change detection",
"hash",
"monitoring",
"stateless"
]
},
{
"description": "PNG or JPEG of a rendered page: viewport, full page, or one element.",
"examples": [
"https://example.com"
],
"id": "screenshot",
"inputModes": [
"application/json"
],
"name": "screenshot",
"outputModes": [
"application/json"
],
"tags": [
"screenshot",
"png",
"jpeg",
"full page",
"element"
]
},
{
"description": "Web search without a search subscription, returning titles, URLs and snippets.",
"examples": [
"https://example.com"
],
"id": "search",
"inputModes": [
"application/json"
],
"name": "search",
"outputModes": [
"application/json"
],
"tags": [
"search",
"web search",
"serp",
"results",
"snippets"
]
},
{
"description": "Bounded async crawl with a job id, a page cap quoted up front, and per-page Markdown.",
"examples": [
"https://example.com"
],
"id": "crawl",
"inputModes": [
"application/json"
],
"name": "crawl",
"outputModes": [
"application/json"
],
"tags": [
"crawl",
"site",
"async",
"job",
"markdown"
]
},
{
"description": "Metadata before spending: status, content type, size, title, language and whether a bot wall is waiting. No page body, no browser, always free.",
"examples": [
"https://example.com"
],
"id": "probe",
"inputModes": [
"application/json"
],
"name": "probe",
"outputModes": [
"application/json"
],
"tags": [
"probe",
"metadata",
"preflight",
"content type",
"bot detection"
]
}
],
"supportedInterfaces": [
{
"protocolBinding": "HTTP+JSON",
"protocolVersion": "1.0",
"url": "https://readfetch.com"
}
],
"version": "0.1.0"
}