MERCURY
UniversityDocsDomainCited Dns

Mercury · Cited Dns

Domain$0.006 / callLivex402API key

GET /buy/dns

What it does

Domain → a SIGNED, timestamped DNS snapshot (A, AAAA, MX, NS, TXT, CNAME, SOA), normalised + sorted into a byte-stable record set with an offline-verifiable provenance receipt — proving exactly what the zone resolved to at that moment. Keyless, no LLM, no signup. (Normalisation is deterministic; DNS itself is mutable across time/TTL/geo — which is the very reason the snapshot is timestamped + signed.)

The goal it serves: pin a domain's infrastructure records to a timestamped, offline-verifiable receipt — evidence-grade domain facts.

Schemas & output preview

Input schema — the exact request shape the route validates.

json · input schema
{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "maxLength": 253,
      "description": "the domain to resolve (e.g. example.com). A full URL is also accepted; its hostname is used."
    },
    "url": {
      "type": "string",
      "maxLength": 2048,
      "description": "alternative to ?domain= — any http/https URL; the registrable hostname is resolved."
    }
  },
  "additionalProperties": false
}

Output schema — the exact response shape the handler returns.

json · output schema
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean",
      "description": "true on success; false on an honest failure (never charged for a stub)"
    },
    "url": {
      "type": "string",
      "description": "the resolved domain (echoed in the `url` field for gate uniformity)"
    },
    "domain": {
      "type": "string",
      "description": "the normalised, lower-cased, trailing-dot-stripped domain that was resolved"
    },
    "status": {
      "type": "integer",
      "description": "200 on a successful resolve (HTTP-shaped status for gate uniformity)"
    },
    "text": {
      "type": "string",
      "description": "canonical sorted-key JSON of `data` — the exact string the receipt signs over"
    },
    "resolvedAt": {
      "type": "string",
      "description": "ISO-8601 resolve time (provenance metadata; binds WHEN the snapshot was taken)"
    },
    "fetchedAt": {
      "type": "string",
      "description": "alias of resolvedAt for gate/receipt uniformity"
    },
    "data": {
      "type": "object",
      "description": "the deterministic, normalised DNS snapshot",
      "properties": {
        "domain": {
          "type": "string"
        },
        "resolver": {
          "description": "pinned resolver IPs used, or 'system'",
          "type": [
            "array",
            "string"
          ],
          "items": {
            "type": "string"
          }
        },
        "records": {
          "type": "object",
          "description": "normalised record sets keyed by type (A, AAAA, MX, NS, TXT, CNAME, SOA); sorted + de-duplicated",
          "properties": {
            "A": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "AAAA": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "MX": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "priority": {
                    "type": "integer"
                  },
                  "exchange": {
                    "type": "string"
                  }
                }
              }
            },
            "NS": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "TXT": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "CNAME": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "SOA": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "nsname": {
                  "type": "string"
                },
                "hostmaster": {
                  "type": "string"
                },
                "serial": {
                  "type": "integer"
                },
                "refresh": {
                  "type": "integer"
                },
                "retry": {
                  "type": "integer"
                },
                "expire": {
                  "type": "integer"
                },
                "minttl": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": {
          "type": "object",
          "description": "record counts per type (derived, deterministic)"
        },
        "flags": {
          "type": "object",
          "description": "derived convenience flags (hasSpf, hasDmarc) pointing into TXT"
        },
        "partialErrors": {
          "type": "object",
          "description": "present only if a record type had a transport error; never fabricated data"
        },
        "snapshot": {
          "type": "string",
          "description": "rubric/version tag: mercury-cited-dns-v1"
        }
      }
    },
    "error": {
      "type": "string",
      "description": "present only when ok:false"
    }
  },
  "required": [
    "ok",
    "url"
  ],
  "additionalProperties": true
}

Output preview — a real example response, shown free (you only pay when you call the route).

json · output preview
{
  "ok": true,
  "url": "iana.org",
  "domain": "iana.org",
  "status": 200,
  "resolvedAt": "2026-06-04T00:00:00.000Z",
  "fetchedAt": "2026-06-04T00:00:00.000Z",
  "text": "{\"domain\":\"iana.org\",\"flags\":{\"hasDmarc\":false,\"hasSpf\":true},\"records\":{…},\"resolver\":[\"1.1.1.1\",\"8.8.8.8\"],\"snapshot\":\"mercury-cited-dns-v1\",\"summary\":{…}}",
  "data": {
    "domain": "iana.org",
    "resolver": [
      "1.1.1.1",
      "8.8.8.8"
    ],
    "records": {
      "A": [
        "192.0.43.8"
      ],
      "AAAA": [
        "2001:500:88:200::8"
      ],
      "MX": [
        {
          "priority": 10,
          "exchange": "mail.iana.org"
        }
      ],
      "NS": [
        "a.iana-servers.net",
        "b.iana-servers.net"
      ],
      "TXT": [
        "v=spf1 -all"
      ],
      "CNAME": [],
      "SOA": {
        "nsname": "ns.icann.org",
        "hostmaster": "noc.dns.icann.org",
        "serial": 2026060400,
        "refresh": 7200,
        "retry": 3600,
        "expire": 1209600,
        "minttl": 3600
      }
    },
    "summary": {
      "A": 1,
      "AAAA": 1,
      "MX": 1,
      "NS": 2,
      "TXT": 1,
      "CNAME": 0,
      "SOA": 1
    },
    "flags": {
      "hasSpf": true,
      "hasDmarc": false
    },
    "snapshot": "mercury-cited-dns-v1"
  }
}

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.

agent.mjs · x402
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/dns?domain=example.com");
const out = await res.json(); // the result + `attestation` (the signed receipt)

Prepaid alternative — the same route accepts an API key:

bash · 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/dns?domain=example.com"
Pay over 402 — get the missing pieceEvery paid call returns an EIP-191 signed receipt — verify it free at /x402/verify.

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.

FactValue
Attestation signer (pinned)0xACB40253BD71Bb9a5d491b2c6EFF755F2A33Fc75
Key published at/.well-known/mercury-attestation
Live verifier (free)/x402/verify
Settlementreal USDC on Base mainnet (eip155:8453) via CDP — auditable on BaseScan

More: all services · /catalog · the headline web-fetch · agent twin of this page: GET /university/docs/cited-dns?format=md