{
  "schema": "affixio.status.components/1",
  "note": "Static registry of the components shown on https://status.affix-io.com/ and the public endpoint each one is checked against. This file records what is checked, not the current result. Results are measured per client at request time.",
  "updated": "2026-08-15",
  "refresh_seconds": 60,
  "timeout_ms": 8000,
  "probe_policy": "Every probe listed here is an unauthenticated GET against a route that serves without an API key. Keyed routes are deliberately not probed. Repeated unauthenticated requests to a keyed route are treated as authentication failures by the API and will get the calling address temporarily blocked, so a recurring check must never point at one.",
  "groups": [
    {
      "id": "verification",
      "name": "Verification plane",
      "components": [
        {
          "id": "api",
          "name": "Verify API",
          "host": "api.affix-io.com",
          "description": "The endpoint SDK calls hit to verify a proof and receive an eligibility outcome.",
          "probe": "https://api.affix-io.com/api/health",
          "method": "GET",
          "expect_status": 200,
          "expect_json": { "status": "ok", "service": "affix-api" },
          "reads": ["status", "service", "policy_version", "engine"]
        },
        {
          "id": "circuits",
          "name": "Proof engine and circuits",
          "host": "api.affix-io.com",
          "description": "Circuit catalogue loaded by the proving and verifying engine.",
          "probe": "https://api.affix-io.com/api/health",
          "method": "GET",
          "expect_status": 200,
          "reads": ["circuit_count", "engine"]
        }
      ]
    },
    {
      "id": "evidence",
      "name": "Evidence plane",
      "components": [
        {
          "id": "attestation",
          "name": "ML-DSA-65 attestation signing",
          "host": "api.affix-io.com",
          "description": "Signing key service behind post-quantum attestation on verification outcomes.",
          "probe": "https://api.affix-io.com/v1/attestation/public-key",
          "method": "GET",
          "expect_status": 200,
          "expect_json": { "algorithm": "ML-DSA-65" },
          "reads": ["algorithm", "key_id", "published_at"]
        },
        {
          "id": "keydiscovery",
          "name": "Signing key discovery",
          "host": "api.affix-io.com",
          "description": "Well-known document a verifier fetches to resolve the current signing key.",
          "probe": "https://api.affix-io.com/.well-known/affix-mldsa65.json",
          "method": "GET",
          "expect_status": 200
        },
        {
          "id": "merkle",
          "name": "Merkle audit tree",
          "host": "api.affix-io.com",
          "description": "Append-only digest tree that backs audit proofs and evidence export.",
          "probe": "https://api.affix-io.com/api/health",
          "method": "GET",
          "expect_status": 200,
          "reads": ["merkle_root", "merkle_leaf_count"]
        }
      ]
    },
    {
      "id": "surfaces",
      "name": "Operator surfaces",
      "components": [
        {
          "id": "hub",
          "name": "Operator Hub",
          "host": "hub.affix-io.com",
          "description": "Sign-in, API key management, usage and webhook endpoint registration.",
          "probe": "https://hub.affix-io.com/",
          "method": "GET",
          "expect_status": 200
        },
        {
          "id": "www",
          "name": "Marketing site and docs",
          "host": "www.affix-io.com",
          "description": "Public documentation, SDK reference and machine-readable briefs.",
          "probe": "https://www.affix-io.com/robots.txt",
          "method": "GET",
          "expect_status": 200
        }
      ]
    },
    {
      "id": "upstream",
      "name": "Upstream dependencies",
      "components": [
        {
          "id": "npm",
          "name": "npm package registry",
          "host": "registry.npmjs.org",
          "description": "Distribution for @affix-io/sdk and @affix-io/sdk-light. Operated by npm, not by AffixIO.",
          "probe": "https://registry.npmjs.org/@affix-io%2Fsdk/latest",
          "method": "GET",
          "expect_status": 200,
          "reads": ["version"],
          "operated_by": "npm, Inc."
        }
      ]
    }
  ],
  "states": {
    "ok": "Probe returned the expected response.",
    "warn": "Probe reached the host but the response was slower than expected or the payload did not match what the component should return.",
    "down": "Probe did not complete from the requesting client.",
    "unknown": "Probe has not run or was blocked before it reached the network."
  }
}
