Mercury · Cited Metadata
GET /buy/metadata
What it does
URL → one typed, SIGNED metadata record (JSON-LD + OpenGraph + Twitter-card + standard <meta> + canonical + title), by source. Deterministic, keyless, no LLM — the social-card/SEO/schema.org record an agent can PROVE.
The goal it serves: turn a page into a typed record an agent can act on, with the signed receipt proving the fields are exactly what Mercury resolved from the source — deterministic, keyless, no LLM.
Schemas & output preview
Input schema — the exact request shape the route validates.
{
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "the page to read metadata from (http/https)"
}
},
"required": [
"url"
],
"additionalProperties": false
}Output schema — the exact response shape the handler returns.
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "true on success; false on an honest failure (you are NOT charged for ok:false)"
},
"url": {
"type": "string",
"description": "final URL after redirects"
},
"status": {
"type": "integer",
"description": "upstream HTTP status"
},
"fetchedAt": {
"type": "string",
"description": "ISO-8601 time the page was read"
},
"data": {
"type": "object",
"description": "the typed metadata record, by source",
"properties": {
"title": {
"type": [
"string",
"null"
],
"description": "<title> text"
},
"canonical": {
"type": [
"string",
"null"
],
"description": "<link rel=canonical> href"
},
"openGraph": {
"type": "object",
"description": "all og:* / article:* / product:* meta, keyed by FULL property name (e.g. 'og:title')",
"additionalProperties": {
"type": "string"
}
},
"twitter": {
"type": "object",
"description": "all twitter:* card meta",
"additionalProperties": {
"type": "string"
}
},
"standard": {
"type": "object",
"description": "standard head meta (description, author, robots, viewport, charset, keywords, …)",
"additionalProperties": {
"type": "string"
}
},
"jsonLd": {
"type": "array",
"description": "every parsed JSON-LD block (@graph flattened)",
"items": {
"type": "object"
}
},
"counts": {
"type": "object",
"description": "how many signals of each class were found",
"properties": {
"jsonLd": {
"type": "integer"
},
"openGraph": {
"type": "integer"
},
"twitter": {
"type": "integer"
},
"standard": {
"type": "integer"
}
}
}
}
},
"text": {
"type": "string",
"description": "the canonical signed string: JSON.stringify(data, sortedKeys). The attestation signs THIS."
},
"error": {
"type": "string",
"description": "present only when ok:false"
},
"attestation": {
"type": "object",
"description": "EIP-191 provenance receipt over sha256(text)+url+status+time, verifiable OFFLINE by anyone (key pinned at /.well-known/mercury-attestation). Proves THIS metadata record is exactly what MERCURY parsed from THIS url at THIS time — the wedge a free metadata API cannot emit."
}
},
"required": [
"ok",
"url"
],
"additionalProperties": false
}Output preview — a real example response, shown free (you only pay when you call the route).
{
"ok": true,
"url": "https://example.com/",
"status": 200,
"fetchedAt": "2026-06-04T00:00:00.000Z",
"data": {
"title": "Example Domain",
"canonical": null,
"openGraph": {},
"twitter": {},
"standard": {
"viewport": "width=device-width, initial-scale=1"
},
"jsonLd": [],
"counts": {
"jsonLd": 0,
"openGraph": 0,
"twitter": 0,
"standard": 1
}
},
"text": "{\"canonical\":null,\"counts\":{\"jsonLd\":0,\"openGraph\":0,\"standard\":1,\"twitter\":0},\"jsonLd\":[],\"openGraph\":{},\"standard\":{\"viewport\":\"width=device-width, initial-scale=1\"},\"title\":\"Example Domain\",\"twitter\":{}}"
}Pay & call
Your agent calls the route; the 402 challenge carries the exact price ($0.006, USDC on Base mainnet); the x402 client settles via the CDP facilitator and retries. No key, no signup.
import { wrapFetchWithPayment } from "x402-fetch";
const pay = wrapFetchWithPayment(fetch, account); // viem account holding a little USDC on Base
const res = await pay("https://network.mercury-hq.com/buy/metadata?url=https://example.com");
const out = await res.json(); // the result + `attestation` (the signed receipt)Prepaid alternative — the same route accepts an API key:
# Same route, prepaid API-key rail (Bearer mk_live_…) — get a key at https://network.mercury-hq.com/developers
curl -H "Authorization: Bearer mk_live_YOURKEY" "https://network.mercury-hq.com/buy/metadata?url=https://example.com"Verify the receipt
Recover the EIP-191 signature over sha256(content)‖url‖status‖fetchedAt‖nonce and confirm the signer equals the pinned attestation key 0xACB40253BD71Bb9a5d491b2c6EFF755F2A33Fc75 (published at /.well-known/mercury-attestation). No callback to Mercury — the receipt verifies offline, forever. Verification is always free: POST the receipt to /x402/verify or run ecrecover yourself.
| Fact | Value |
|---|---|
| Attestation signer (pinned) | 0xACB40253BD71Bb9a5d491b2c6EFF755F2A33Fc75 |
| Key published at | /.well-known/mercury-attestation |
| Live verifier (free) | /x402/verify |
| Settlement | real USDC on Base mainnet (eip155:8453) via CDP — auditable on BaseScan |
Related
Cited Feed
$0.005Cited Links
$0.005Cited Table
$0.006Structured Extract
$0.004More: all services · /catalog · the headline web-fetch · agent twin of this page: GET /university/docs/cited-metadata?format=md