{"openapi":"3.1.0","info":{"title":"ScrapeMole Reader: web pages to Markdown, link previews, RSS feeds, links and sitemaps for AI agents","version":"1.0.0","description":"Pay-per-call web reading for agents: any public page as clean Markdown, link-preview/SEO metadata (Open Graph, Twitter card, favicon, JSON-LD), RSS/Atom/JSON feeds normalized, every link on a page (internal/external, rel) and a site's XML sitemap as a URL list. USDC via x402, no accounts or API keys; failed calls are never charged.\n\nPayments: x402 v2, scheme \"exact\", USDC on Base (eip155:8453). The payment is verified before the work and settled only when the response is 200. Terms: https://reader.scrapemole.workers.dev/terms","contact":{"email":"edgaras@mail.grokbot.com","url":"https://scrapemole.pages.dev"},"x-guidance":"Call any /v1 endpoint without payment to receive a 402 with the exact price, then retry with an x402 client (e.g. @x402/fetch). 4xx/5xx responses are never charged."},"servers":[{"url":"https://reader.scrapemole.workers.dev"}],"components":{"securitySchemes":{"x402":{"type":"http","scheme":"x402","description":"HTTP 402 payment with USDC via the x402 protocol."}}},"paths":{"/v1/read":{"get":{"operationId":"read","summary":"Any public web page as clean Markdown (main content only) plus title, author, date and word count.","description":"Use when you need to read one public web page: fetches the URL live and returns its main readable content as clean Markdown (or plain text), with navigation, ads, cookie banners and boilerplate removed, plus title, byline, publish date, language and word count. Respects robots.txt. Server-rendered HTML only (no JavaScript execution).","tags":["web","markdown","readability","scraping","rag"],"parameters":[{"name":"url","in":"query","required":true,"description":"Public http(s) URL of the page.","schema":{"type":"string","examples":["https://example.com"]}},{"name":"format","in":"query","required":false,"description":"Output format.","schema":{"type":"string","enum":["markdown","text"],"default":"markdown"}},{"name":"maxChars","in":"query","required":false,"description":"Cut the content at this many characters (1000-200000).","schema":{"type":"string","default":"50000"}},{"name":"images","in":"query","required":false,"description":"Keep images as Markdown image links (true/false).","schema":{"type":"string","default":"true"}},{"name":"links","in":"query","required":false,"description":"Keep hyperlinks as Markdown links (true/false).","schema":{"type":"string","default":"true"}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.003","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"url":"https://example.com","finalUrl":"https://example.com/","title":"Example Domain","lang":"en","format":"markdown","content":"# Example Domain\n\nThis domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.\n\n[More information...](https://www.iana.org/domains/example)","wordCount":30,"chars":230,"truncated":false}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}},"/v1/meta":{"get":{"operationId":"meta","summary":"Link preview / SEO metadata for a URL: title, description, Open Graph, Twitter card, canonical, favicon, feeds, JSON-LD types.","description":"Use when you need a link preview or page metadata: fetches the URL live and returns title, description, site name, canonical URL, language, Open Graph and Twitter card tags, preview image, favicon, author and publish date, RSS/Atom feeds, robots meta and JSON-LD (schema.org) types, after following redirects.","tags":["web","metadata","opengraph","seo","link-preview"],"parameters":[{"name":"url","in":"query","required":true,"description":"Public http(s) URL.","schema":{"type":"string","examples":["https://github.com"]}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"url":"https://github.com","finalUrl":"https://github.com/","status":200,"contentType":"text/html; charset=utf-8","title":"GitHub · Change is constant. GitHub keeps you ahead.","description":"Join the world’s most widely adopted, AI-powered developer platform…","siteName":"GitHub","canonical":"https://github.com/","lang":"en","type":"object","image":"https://images.ctfassets.net/…/github-og.png","favicon":"https://github.githubassets.com/favicons/favicon.svg","openGraph":{"site_name":"GitHub","type":"object","title":"GitHub · Change is constant…"},"twitterCard":{"card":"summary_large_image","site":"@github"}}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}},"/v1/feed":{"get":{"operationId":"feed","summary":"Latest items of an RSS, Atom or JSON feed, normalized (title, link, date, author, summary, image). Give a feed URL or a site URL (feed auto-discovered).","description":"Use when you need the latest posts or headlines from a site, blog, newsroom, podcast or subreddit: give a feed URL or just the site URL (the RSS/Atom feed is auto-discovered from the page) and get normalized items with title, link, publish date (ISO 8601), author, summary, image and categories, newest first as the feed lists them.","tags":["rss","atom","feeds","news","headlines"],"parameters":[{"name":"url","in":"query","required":true,"description":"Feed URL, or a site/page URL to auto-discover its feed.","schema":{"type":"string","examples":["https://hnrss.org/frontpage"]}},{"name":"limit","in":"query","required":false,"description":"Max items (1-100).","schema":{"type":"string","default":"20"}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.002","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"url":"https://hnrss.org/frontpage","feedUrl":"https://hnrss.org/frontpage","format":"rss-2.0","title":"Hacker News: Front Page","link":"https://news.ycombinator.com/","count":1,"items":[{"title":"Show HN: …","link":"https://example.com/post","id":"https://news.ycombinator.com/item?id=1","published":"2026-10-11T18:00:00.000Z","author":"pg","summary":"Article URL: … Points: 120 # Comments: 45"}]}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}},"/v1/links":{"get":{"operationId":"links","summary":"All links on a web page, absolute and deduplicated, with anchor text, internal/external flag, nofollow/sponsored/ugc rel and how often each appears.","description":"Use when you need the outgoing links of one page (crawling, SEO audits, finding a contact/pricing/docs page, link building): fetches the URL live (respects robots.txt) and returns every http(s) link resolved to an absolute URL, deduplicated, with anchor text (or image alt), internal vs external, rel nofollow/sponsored/ugc, target=_blank and occurrence count, plus internal/external totals. Filter with type=internal|external.","tags":["web","links","crawling","seo","scraping"],"parameters":[{"name":"url","in":"query","required":true,"description":"Public http(s) URL of the page.","schema":{"type":"string","examples":["https://www.sitemaps.org"]}},{"name":"type","in":"query","required":false,"description":"Which links to return.","schema":{"type":"string","enum":["all","internal","external"],"default":"all"}},{"name":"limit","in":"query","required":false,"description":"Max distinct links (1-2000).","schema":{"type":"string","default":"500"}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.002","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"url":"https://www.sitemaps.org/","finalUrl":"https://www.sitemaps.org/","count":3,"internalCount":3,"externalCount":1,"totalAnchors":5,"truncated":true,"links":[{"url":"https://www.sitemaps.org/faq.php","text":"FAQ","internal":true,"count":1},{"url":"https://www.sitemaps.org/protocol.php","text":"Protocol","internal":true,"count":2},{"url":"http://creativecommons.org/licenses/by-sa/2.5/","text":"Attribution-ShareAlike Creative Commons License","internal":false,"count":1}]}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}},"/v1/sitemap":{"get":{"operationId":"sitemap","summary":"A site's XML sitemap as a URL list with lastmod, changefreq and priority. Finds it via robots.txt or /sitemap.xml; handles sitemap indexes and .xml.gz.","description":"Use when you need the list of pages a site publishes (to crawl it, find recent posts, or audit SEO): give a site URL (the sitemap is discovered from robots.txt Sitemap: lines, then /sitemap.xml, /sitemap_index.xml, /wp-sitemap.xml) or a sitemap URL directly. Returns the page URLs with lastmod, changefreq and priority; for a sitemap index, returns its child sitemaps and (expand=true, default) the URLs of the first child sitemaps up to the limit. Gzipped sitemaps supported.","tags":["sitemap","seo","crawling","web","urls"],"parameters":[{"name":"url","in":"query","required":true,"description":"Site URL (e.g. https://example.com) or a sitemap .xml/.xml.gz URL.","schema":{"type":"string","examples":["https://www.sitemaps.org"]}},{"name":"limit","in":"query","required":false,"description":"Max page URLs returned (1-5000).","schema":{"type":"string","default":"1000"}},{"name":"expand","in":"query","required":false,"description":"For a sitemap index, also read the first child sitemaps (true/false).","schema":{"type":"string","default":"true"}}],"security":[{"x402":[]}],"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.002","currency":"USD","network":"eip155:8453","networks":["eip155:8453"],"asset":"USDC"},"responses":{"200":{"description":"Result (the payment settles only for this status).","content":{"application/json":{"example":{"url":"https://www.sitemaps.org/","sitemapUrl":"https://www.sitemaps.org/sitemap.xml","discoveredVia":"robots.txt","type":"urlset","count":2,"urls":[{"url":"https://www.sitemaps.org/","lastmod":"2016-11-21"},{"url":"https://www.sitemaps.org/protocol.html","lastmod":"2016-11-21"}],"truncated":false}}}},"400":{"description":"Invalid input. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"402":{"description":"Payment required (x402). The PAYMENT-REQUIRED header (mirrored in the body) carries price, network and payTo."},"404":{"description":"Not found / no data. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"502":{"description":"Upstream error. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}},"504":{"description":"Upstream timeout. Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean","const":false}}}}}}}}}}}}}