{"audit":{"version":"1.5","generated_at":"2026-10-29T03:37:17.773688+00:00","generated_by":"Agenstry","report_url":"https://agenstry.com/agents/readfetch.com","methodology_url":"https://agenstry.com/methodology","verifier_jwks_url":"https://agenstry.com/.well-known/jwks.json","subject":{"domain":"readfetch.com","name":"readfetch.com","url":"https://readfetch.com/.well-known/agent-card.json"}},"identity":{"provider":{"organization":"readfetch.com","url":"https://readfetch.com"},"registry_verification":null,"signature":{"signed":false,"signature_valid":null}},"protocol":{"version":"1.0","supports_streaming":false,"supports_push_notifications":false},"operational":{"live_state":"no_url","live_responds":null,"last_status_code":200,"last_elapsed_ms":23,"last_error":null},"track_record":{"first_seen":"2026-10-29T00:45:36.242564+00:00","last_checked":"2026-10-29T01:37:15.286008+00:00","last_seen_ok":"2026-10-29T01:37:15.286008+00:00","checks_total":2,"checks_ok":2,"uptime_pct":100.0,"uptime_window_days":30,"uptime_probes":1,"archived":false,"archived_reason":null},"conformance":{"score":52,"grade":"D","summary":"D-grade: significant issues, auth-gated, partially broken, or stale.","criteria":[{"key":"valid_card","label":"Valid AgentCard","points":10,"max_points":10,"status":"pass","detail":"Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification)."},{"key":"live_responds","label":"Live JSON-RPC","points":10,"max_points":25,"status":"partial","detail":"Card declares only gRPC / HTTP+JSON interfaces; the live probe covers JSON-RPC, so the endpoint was not exercised. Not a defect in the card."},{"key":"protocol_version","label":"Protocol version","points":10,"max_points":10,"status":"pass","detail":"Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape)."},{"key":"signature","label":"JWS signature","points":0,"max_points":10,"status":"info","detail":"Card is unsigned (most published agents are)."},{"key":"uptime","label":"Uptime track record","points":0,"max_points":15,"status":"info","detail":"Only 1 probe so far, need ≥5 for an uptime grade."},{"key":"skills","label":"Skill declaration","points":10,"max_points":10,"status":"pass","detail":"Declares 13 skills with structured metadata."},{"key":"verified_identity","label":"Verified Identity","points":5,"max_points":10,"status":"partial","detail":"Provider declared: readfetch.com (https://readfetch.com). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit."},{"key":"freshness","label":"Freshness + modern flags","points":5,"max_points":5,"status":"pass","detail":"declares 1 modern capability flag(s) (x402); seen in upstream source within 0d"},{"key":"security","label":"Security declaration","points":2,"max_points":5,"status":"partial","detail":"Declares 1 security scheme(s) but none use PKCE or mTLS."}]},"card_read":{"findings":[],"clean":true,"source_url":"https://readfetch.com/.well-known/agent-card.json"},"skills":[{"id":"text","name":"text","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.","tags":["readability","article extraction","html to text","html to markdown","web reader","content extraction","metadata","open graph","no javascript"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"map","name":"map","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.","tags":["sitemap","robots.txt","rss","atom","feed discovery","url discovery","site map","crawl planning","link inventory"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"scrape","name":"scrape","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.","tags":["scrape","javascript rendering","browser rendering","markdown","html","spa","web scraping"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"scrape-residential","name":"residential","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.","tags":["residential proxy","protected sites","anti-bot","scrape","browser rendering"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"fetch","name":"fetch","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.","tags":["http client","raw http","api calls","graphql","proxy"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"batch","name":"batch","description":"Up to 50 URLs in one call and one payment. Results in input order; an undelivered page is not billed and is credited.","tags":["batch","bulk","multiple urls","concurrent","markdown"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"pdf","name":"pdf","description":"Documents, not pages: page text plus one Markdown body, priced per document.","tags":["pdf","document text","page text","markdown","metadata"],"examples":["https://example.com/paper.pdf"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"section","name":"section","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.","tags":["section","heading","selector","tokens","docs"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"diff","name":"diff","description":"Stateless change detection: send the hash you hold, get changed/unchanged and a bounded diff. A no-change answer is billable.","tags":["diff","change detection","hash","monitoring","stateless"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"screenshot","name":"screenshot","description":"PNG or JPEG of a rendered page: viewport, full page, or one element.","tags":["screenshot","png","jpeg","full page","element"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"search","name":"search","description":"Web search without a search subscription, returning titles, URLs and snippets.","tags":["search","web search","serp","results","snippets"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"crawl","name":"crawl","description":"Bounded async crawl with a job id, a page cap quoted up front, and per-page Markdown.","tags":["crawl","site","async","job","markdown"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]},{"id":"probe","name":"probe","description":"Metadata before spending: status, content type, size, title, language and whether a bot wall is waiting. No page body, no browser, always free.","tags":["probe","metadata","preflight","content type","bot detection"],"examples":["https://example.com"],"inputModes":["application/json"],"outputModes":["application/json"]}],"provenance":[{"source":"agentic_market","first_seen":"2026-10-29T00:45:36.242564+00:00"},{"source":"recrawl_paid","first_seen":"2026-10-29T01:37:15.286008+00:00"}],"recent_probes":[{"fetched_at":"2026-10-29T01:37:15.286008+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":23,"live_responds":null}],"catalog_attestation":null,"operator_revenue_evidence":{"evidence_class":"operator_submitted","authenticity":{"rung":"no_operator_evidence","rank":0,"why":"No verifiable operator evidence has been submitted for this agent.","thresholds":{"min_independent_payers":3,"min_verified_usd":25.0},"engine_table":"agent_authenticity","merge_rule":"max(existing_rank, rank)"},"metric_metadata":{"provenance":"operator_submitted_evidence","confidence":"attested","coverage":{"numerator":0},"as_of":"2026-10-29T03:37:17.778827+00:00","definition":"Revenue proofs submitted by the verified owner and re-checked by Agenstry against the settlement chain or the operator's own Stripe account. Only independently confirmed proofs are counted."},"counts":{"retained":0,"verified":0,"unverifiable":0},"verified":{"gross_usd":0.0,"transactions":0,"independent_payers":0},"detail_url":"https://agenstry.com/api/agents/readfetch.com/evidence","dispute_url":"https://agenstry.com/agents/readfetch.com/dispute"},"verification_history":[]}