openapi: 3.2.0
info:
title: MERCURY x402 storefront Cited Feed API
version: '1'
x-spec: mercury-storefront/1
description: Agent-payable resources over HTTP 402 (x402). LIVE — Base mainnet, real USDC, no token. Only currently-deliverable routes are listed (web-fetch is the live paid SKU; mints are gated off). Free discovery at /.well-known/x402, /x402/discovery, /catalog, and /manifest.
servers:
- url: https://network.mercury-hq.com
tags:
- name: cited-feed
paths:
/buy/feed:
get:
summary: MERCURY Cited Feed
description: 'RSS/Atom feed URL → a SIGNED, normalized item list [{title,link,published,summary}] unified across RSS 2.0/RDF + Atom 1.0: CDATA unwrapped, HTML stripped, entities decoded, dates → ISO-8601 (publishedRaw kept verbatim, never fabricated). Deterministic — same feed bytes ⇒ byte-identical items; no LLM. Core 4 fields only (not full-content/media/author). Receipt = EIP-191 over the canonical item list.'
operationId: buy_cited_feed
tags:
- cited-feed
responses:
'200':
description: Delivered after the x402 payment settles on Base mainnet.
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
description: true on success; false on an honest failure (still delivered)
url:
type: string
description: final feed URL after redirects
status:
type: integer
description: upstream HTTP status
data:
type: object
description: the normalized feed (the product the buyer consumes)
properties:
feedTitle:
type: string
description: channel/feed
kind:
type: string
enum:
- rss
- atom
description: which dialect was parsed
count:
type: integer
description: number of normalized items (capped at 100)
items:
type: array
description: uniform item records across both dialects
items:
type: object
properties:
title:
type: string
description: item/entry title (CDATA-unwrapped, decoded)
link:
type: string
description: canonical article URL (Atom alternate / RSS link / permalink id)
published:
type: string
description: ISO-8601 UTC when parseable, else empty (see publishedRaw)
publishedRaw:
type: string
description: the feed's original date string, verbatim (honest)
summary:
type: string
description: item description/summary, HTML stripped, ≤1000 chars
text:
type: string
description: canonical JSON string the signed receipt covers (data, with object keys sorted)
contentType:
type: string
fetchedAt:
type: string
description: ISO8601 fetch time (in the signed payload)
error:
type: string
description: present only when ok:false
required:
- ok
- url
additionalProperties: false
'402':
description: Payment Required — retry with an x402-signed payment (e.g. x402-fetch). Terms are in the challenge body (x402 v1).
parameters:
- name: url
in: query
required: true
schema:
type: string
maxLength: 2048
description: the RSS/Atom feed to normalize (http/https)
description: the RSS/Atom feed to normalize (http/https)
x-payment-info:
protocols:
- x402
scheme: exact
price: $0.005
currency: USDC
network: base
networkCaip2: eip155:8453
testnet: false
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
payTo: '0xe10B9d44e72A29B9c19da02981FFCd875308e3C1'
facilitator: https://api.cdp.coinbase.com/platform/v2/x402
x402Version: 1
x-x402:
scheme: exact
price: $0.005
currency: USDC
network: base
networkCaip2: eip155:8453
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
payTo: '0xe10B9d44e72A29B9c19da02981FFCd875308e3C1'
facilitator: https://api.cdp.coinbase.com/platform/v2/x402
testnet: false
maxTimeoutSeconds: 60
x-payment-info:
protocols:
- x402
network: base
currency: USDC
payTo: '0xe10B9d44e72A29B9c19da02981FFCd875308e3C1'
facilitator: https://api.cdp.coinbase.com/platform/v2/x402
testnet: false
spec: mercury-storefront/1