{
  "service": "402registry",
  "summary": "Pay-per-check discoverability audit: does an AI crawler actually see your site? Signed HTTP audit over the x402 protocol (USDC on Base) — no account, no card, no human.",
  "quickstart": [
    {
      "step": 1,
      "title": "Check if a site is already listed",
      "request": "GET https://402registry.com/api/check?url=https://example.com/",
      "note": "Free, cached, no payment. Unknown host is a normal 200 with known:false, not an error."
    },
    {
      "step": 2,
      "title": "Buy a check",
      "request": "GET https://402registry.com/buy/one?site=https://example.com/",
      "note": "Without a payment header this answers 402 with the x402 payment requirements ($2 for one check) plus, if the site is accepted, the maximum checks that domain can buy. Pay with an x402-capable client (e.g. @x402/fetch) and resend the same request with the payment header attached."
    },
    {
      "step": 3,
      "title": "Read the report",
      "request": "GET https://402registry.com/r/{id}",
      "note": "The `report` URL from the purchase response. HTML by default; add ?format=json or send Accept: application/json for the machine-readable form."
    },
    {
      "step": 4,
      "title": "Show the badge",
      "request": "GET https://402registry.com/badge/{host}.svg",
      "note": "Free, cached SVG. Embed it anywhere — it always renders, even for a host that was never checked."
    }
  ],
  "verdicts": {
    "listed": "The site passed: no critical findings. Earns a dated badge and a registry listing.",
    "refused": "The site failed a hard rule (e.g. an empty shell with no metadata at all). No registry listing; the report still explains every finding.",
    "doubt": "The automated rules did not find a hard failure, but the model could not confirm a pass either. No credit is spent; a recheck token is issued instead."
  },
  "packs": [
    {
      "id": "one",
      "checks": 1,
      "priceUsdc": "2",
      "perCheckUsdc": "2",
      "label": "One check",
      "buy": "https://402registry.com/buy/one"
    },
    {
      "id": "two",
      "checks": 2,
      "priceUsdc": "3",
      "perCheckUsdc": "1.5",
      "label": "Two checks",
      "buy": "https://402registry.com/buy/two"
    },
    {
      "id": "four",
      "checks": 4,
      "priceUsdc": "5",
      "perCheckUsdc": "1.25",
      "label": "Four checks",
      "buy": "https://402registry.com/buy/four"
    }
  ],
  "routes": [
    {
      "method": "GET",
      "path": "/",
      "summary": "Landing page",
      "description": "Human-readable landing page: what the service does, current pricing, and machine endpoints.",
      "example": "https://402registry.com/"
    },
    {
      "method": "GET",
      "path": "/registry",
      "summary": "Public registry",
      "description": "Sites that paid for a check and came back \"listed\", newest first. Free, cached, no payment.",
      "example": "https://402registry.com/registry"
    },
    {
      "method": "GET",
      "path": "/docs",
      "summary": "API guide (JSON)",
      "description": "This document, as machine-readable JSON: quickstart, verdict meanings, current pricing, and the same route list as /openapi.json.",
      "example": "https://402registry.com/docs"
    },
    {
      "method": "GET",
      "path": "/openapi.json",
      "summary": "OpenAPI specification",
      "description": "This OpenAPI 3.1 document.",
      "example": "https://402registry.com/openapi.json"
    },
    {
      "method": "GET",
      "path": "/sitemap.xml",
      "summary": "Sitemap",
      "description": "Real HTML pages only: the landing page, and /registry once it has at least one listed site.",
      "example": "https://402registry.com/sitemap.xml"
    },
    {
      "method": "GET",
      "path": "/og.png",
      "summary": "Social preview image",
      "description": "1200x630 PNG used as og:image / twitter:image when a link to this site is shared.",
      "example": "https://402registry.com/og.png"
    },
    {
      "method": "GET",
      "path": "/.well-known/402registry.json",
      "summary": "Machine manifest",
      "description": "Service identity, x402 payment protocol details, current packs, and whether the till is open right now.",
      "example": "https://402registry.com/.well-known/402registry.json"
    },
    {
      "method": "GET",
      "path": "/health",
      "summary": "Liveness probe",
      "description": "Cheap health check for uptime monitors: kill switch state and how long ago the maintenance sweep last ran.",
      "example": "https://402registry.com/health"
    },
    {
      "method": "GET",
      "path": "/buy/{pack}",
      "summary": "Buy a check (x402)",
      "description": "Without a payment header this is a browse request: it answers 402 with the x402 payment requirements for `pack` (and, if `site` is given and accepted, the maximum number of checks that domain can buy). With a valid `PAYMENT-SIGNATURE` (x402 v2) or `X-PAYMENT` (x402 v1) header it is a real purchase: the payment is verified and settled, the site is fetched and checked, and the response carries the verdict and a link to the report.",
      "example": "https://402registry.com/buy/one"
    },
    {
      "method": "GET",
      "path": "/r/{id}",
      "summary": "Check report",
      "description": "The report for a paid check: findings, each with evidence quoted verbatim, and a fix for the detected stack. HTML by default (for the human behind the agent); `?format=json` or `Accept: application/json` returns the same data as JSON. Never indexed by search engines.",
      "example": "https://402registry.com/r/00000000000000000000000000000000"
    },
    {
      "method": "GET",
      "path": "/api/check",
      "summary": "Free badge lookup",
      "description": "Looks up a host in the registry by URL. Free, cached, no payment. Unknown host is a normal 200 with `known:false`, not an error.",
      "example": "https://402registry.com/api/check?url=https://example.com/"
    },
    {
      "method": "GET",
      "path": "/badge/{host}",
      "summary": "Status badge (SVG)",
      "description": "An embeddable status badge. The path segment is the host plus a literal \".svg\" suffix, e.g. \"/badge/example.com.svg\". Free, cached, no payment.",
      "example": "https://402registry.com/badge/example.com.svg"
    }
  ],
  "links": {
    "registry": "https://402registry.com/registry",
    "openapi": "https://402registry.com/openapi.json",
    "manifest": "https://402registry.com/.well-known/402registry.json",
    "sitemap": "https://402registry.com/sitemap.xml"
  },
  "abuseContact": "abuse@402registry.com"
}