---
title: "MERCURY Cited Readability"
method: GET
path: "/buy/readability"
tags: ["cited-readability", "readability", "article-extraction", "boilerplate-removal", "clean-citation", "rag", "rag-ingest", "verifiable-web-fetch", "attestation", "provenance", "verifiable-data-record", "llm-ready", "agent-web-fetch", "scraping", "keyless", "agent-native"]
---

# MERCURY Cited Readability

`GET /buy/readability`

## Request

- Base URL: `https://network.mercury-hq.com`
- URL: `https://network.mercury-hq.com/buy/readability`
- Auth: none declared
- TypeScript: <https://skmtc.dev/mercury-hq/apis/mercury-x402-storefront/docs/buy/readability/get.ts> (a function with typed inputs; its response is checked against the schema)

URL → a clean ARTICLE record { title, byline, publishedAt, article text } with boilerplate (nav/header/footer/sidebar/ads/share-bars/comment-forms) stripped via deterministic DOM density heuristics, plus a signed provenance receipt pinning the cleaned article to its source — the clean-citation primitive distinct from raw markdown. Deterministic (no LLM): same URL + same source bytes ⇒ byte-identical output.

## Query parameters

- `url` string, required: the article page to extract (http/https)

## Response `200`

Delivered after the x402 payment settles on Base mainnet.

- object
  - `ok` boolean, required: true on success; false on an honest failure (503-before-charge — you are NOT billed)
  - `url` string, required: final URL after redirects
  - `status` integer: upstream HTTP status
  - `text` string: the canonical signed string: JSON.stringify(data, sortedKeys). The EIP-191 attestation signs THIS, so the buyer can prove the WHOLE article record (title+byline+date+body) is exactly what MERCURY extracted from this url at this time.
  - `fetchedAt` string: ISO-8601 fetch time (also folded into the signed receipt)
  - `data` object: the structured article record the buyer consumes
    - `title` string, nullable: article headline (JSON-LD headline/name → og:title → <title>)
    - `byline` string, nullable: author/byline (JSON-LD author → article:author/author meta), 'By ' prefix stripped
    - `publishedAt` string, nullable: publish date, ISO-8601 when parseable (JSON-LD datePublished → article:published_time); raw string if present but un-parseable; null if absent
    - `siteName` string, nullable: publication / site name (og:site_name) when present
    - `excerpt` string, nullable: page description (meta/og) or the first ~280 chars of the body — a citation card
    - `articleText` string: the cleaned article body prose, boilerplate stripped
    - `wordCount` integer: word count of the cleaned article body (for chunk/cost budgeting)
    - `extractedBy` 'landmark' | 'density' | 'fallback': which deterministic strategy isolated the body (article/main landmark, density scorer, or whole-body fallback)
    - `contentType` string
    - `bytes` integer: raw upstream body size
    - `truncated` boolean: true if the cleaned article hit the text cap
    - `redirects` string[]: redirect chain followed
  - `error` string: present only when ok:false
  - `attestation` object: EIP-191 provenance receipt over sha256(text)+url+status+time, verifiable OFFLINE by anyone (key pinned at /.well-known/mercury-attestation). Proves THIS article record is exactly what MERCURY extracted from THIS url at THIS time — the wedge a free reader cannot emit.

## Other responses

- `402`: Payment Required — retry with an x402-signed payment (e.g. x402-fetch). Terms are in the challenge body (x402 v1).

---

[API](https://skmtc.dev/mercury-hq/apis/mercury-x402-storefront.md) - [All operations](https://skmtc.dev/mercury-hq/apis/mercury-x402-storefront/llms.txt) - [OpenAPI document](https://skmtc.dev/mercury-hq/apis/mercury-x402-storefront/revisions/211aa7db24ae?raw)
