{
  "openapi": "3.1.1",
  "info": {
    "title": "Internet infrastructure explorers API",
    "version": "1.0.0",
    "summary": "Deterministic tools for people and AI agents.",
    "description": "Every endpoint performs the same calculation as the human page and returns inputs, result, units, assumptions, sources, warnings and computedAt. MCP endpoint: /mcp."
  },
  "servers": [
    {
      "url": "https://infrastructure.usefulweb.site"
    }
  ],
  "paths": {
    "/api/v1/tools": {
      "get": {
        "operationId": "listTools",
        "summary": "Catalog of all tools",
        "responses": {
          "200": {
            "description": "Tool list.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/{id}": {
      "get": {
        "operationId": "getTool",
        "summary": "Definition of one tool",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "asn-relationship-explorer",
                "bgp-route-explorer",
                "cdn-behavior-explorer",
                "certificate-transparency-explorer",
                "dns-certificate-explorer",
                "domain-history-graph",
                "email-infrastructure-explorer",
                "global-dns-explorer",
                "http-technology-explorer",
                "internet-outage-atlas",
                "ipv6-readiness-explorer"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tool definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/asn-relationship-explorer/calculate": {
      "post": {
        "operationId": "calculateAsnRelationshipExplorer",
        "summary": "An autonomous system at a glance: holder, country, BGP neighbours and announced prefixes.",
        "description": "Explains an Autonomous System Number with RIPEstat data: registered holder and country, neighbours observed in RIPE RIS AS paths (left = towards the collectors, typically upstreams/peers; right = towards the origin, typically customers), announced IPv4/IPv6 prefixes with address-space totals, and a neighbour graph.\n\nMethodology:\n- as-overview: registered holder and whether the AS is announced; rir-stats-country: country of the registration (RIR statistics), not where the network operates.\n- asn-neighbours: ASes adjacent to this AS in RIS AS paths. Per RIPEstat, \"left\" neighbours appear between this AS and the RIS collector (typically its upstream providers or peers) and \"right\" neighbours appear between it and the origin (typically customers). \"Uncertain\" = seen on the left only as direct peers of a RIS collector. \"Power\" = how often the adjacency was observed. Public BGP data cannot reliably separate peers from providers.\n- announced-prefixes: prefixes originated by the AS over RIPEstat's default window (last 2 weeks); totals in /24 (IPv4) and /48 (IPv6) equivalents.\n- Live mode also looks up holder names of the 10 strongest neighbours (as-overview).",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "asn_relationship_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AsnRelationshipExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted RIPEstat data for AS3333 (RIPE NCC)",
                  "value": {
                    "mode": "pasted",
                    "maxNeighbours": 25,
                    "pasted": "{\"asn\":\"AS3333\",\"asOverview\":{\"data\":{\"type\":\"as\",\"resource\":\"3333\",\"block\":{\"resource\":\"3154-3353\",\"desc\":\"Assigned by RIPE NCC\",\"name\":\"IANA 16-bit Autonomous System (AS) Numbers Registry\"},\"holder\":\"RIPE-NCC-AS Reseaux IP Europeens Network Coordination Centre (RIPE NCC)\",\"announced\":true}},\"asnNeighbours\":{\"data\":{\"resource\":\"3333\",\"query_endtime\":\"2026-10-14T00:00:00\",\"neighbour_counts\":{\"left\":5,\"right\":1,\"unique\":7,\"uncertain\":1},\"neighbours\":[{\"asn\":1103,\"type\":\"left\",\"power\":14821,\"v4_peers\":81016,\"v6_peers\":7309},{\"asn\":1273,\"type\":\"left\",\"power\":7548,\"v4_peers\":74920,\"v6_peers\":27694},{\"asn\":1136,\"type\":\"left\",\"power\":4442,\"v4_peers\":40372,\"v6_peers\":5525},{\"asn\":12859,\"type\":\"left\",\"power\":2512,\"v4_peers\":17420,\"v6_peers\":1059},{\"asn\":8218,\"type\":\"uncertain\",\"power\":40,\"v4_peers\":300,\"v6_peers\":10},{\"asn\":14840,\"type\":\"left\",\"power\":2,\"v4_peers\":30,\"v6_peers\":0},{\"asn\":197000,\"type\":\"right\",\"power\":120,\"v4_peers\":900,\"v6_peers\":700}]}},\"announcedPrefixes\":{\"data\":{\"resource\":\"3333\",\"query_starttime\":\"2026-09-30T08:00:00\",\"query_endtime\":\"2026-10-14T08:00:00\",\"prefixes\":[{\"prefix\":\"2a13:27c0::/44\",\"timelines\":[{\"starttime\":\"2026-09-30T08:00:00\",\"endtime\":\"2026-10-07T00:00:00\"},{\"starttime\":\"2026-10-07T16:00:00\",\"endtime\":\"2026-10-14T08:00:00\"}]},{\"prefix\":\"193.0.18.0/23\",\"timelines\":[{\"starttime\":\"2026-09-30T08:00:00\",\"endtime\":\"2026-10-14T08:00:00\"}]},{\"prefix\":\"193.0.22.0/23\",\"timelines\":[{\"starttime\":\"2026-09-30T08:00:00\",\"endtime\":\"2026-10-14T08:00:00\"}]},{\"prefix\":\"193.0.0.0/21\",\"timelines\":[{\"starttime\":\"2026-09-30T08:00:00\",\"endtime\":\"2026-10-14T08:00:00\"}]},{\"prefix\":\"2001:67c:2e8::/48\",\"timelines\":[{\"starttime\":\"2026-09-30T08:00:00\",\"endtime\":\"2026-10-14T08:00:00\"}]}]}},\"rirStatsCountry\":{\"data\":{\"located_resources\":[{\"resource\":\"3333\",\"location\":\"NL\"}]}}}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AsnRelationshipExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/bgp-route-explorer/calculate": {
      "post": {
        "operationId": "calculateBgpRouteExplorer",
        "summary": "Who announces an IP or prefix in BGP: origin ASes, RPKI validity, visibility and origin changes.",
        "description": "Looks up an IP address or prefix in RIPE RIS via the RIPEstat Data API: the covering announced prefix, origin AS(es) and holders, RPKI ROV state per origin, visibility among RIS full-feed peers, first/last seen, more-specifics announced by others, a timeline of origin changes and sample AS paths with upstreams.\n\nMethodology:\n- prefix-overview: the announced prefix covering the input (aligned to the first less-specific if the exact one is not announced), origin AS(es) and holder names.\n- routing-status: visibility = RIS full-feed peers seeing the prefix ÷ all RIS full-feed peers of that address family; first/last seen; more- and less-specific announcements; IRR route objects.\n- routing-history: per origin and prefix, the periods RIS saw the announcement (routes seen by fewer than 10 full-feed peers are excluded by RIPEstat); start/stop events form the origin timeline. Covering prefixes (e.g. bogus /3 or /8 leaks) also appear and are marked as related.\n- rpki-validation: Routinator's ROV state for each origin AS + prefix (valid, invalid_asn, invalid_length, unknown = no covering ROA).\n- looking-glass (optional): current AS paths at RIS collectors; the AS immediately before the origin in each path is counted as an observed upstream.",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "bgp_route_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BgpRouteExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted RIPEstat data for 193.0.0.0/21 (RIPE NCC)",
                  "value": {
                    "mode": "pasted",
                    "pasted": "{\"resource\":\"193.0.6.139\",\"prefixOverview\":{\"data\":{\"is_less_specific\":true,\"announced\":true,\"asns\":[{\"asn\":3333,\"holder\":\"RIPE-NCC-AS Reseaux IP Europeens Network Coordination Centre (RIPE NCC)\"}],\"resource\":\"193.0.0.0/21\",\"block\":{\"resource\":\"193.0.0.0/8\",\"desc\":\"RIPE NCC (Status: ALLOCATED)\"}}},\"routingStatus\":{\"data\":{\"first_seen\":{\"prefix\":\"193.0.0.0/21\",\"origin\":\"3333\",\"time\":\"2000-10-31T00:00:00\"},\"last_seen\":{\"prefix\":\"193.0.0.0/21\",\"origin\":\"3333\",\"time\":\"2026-10-14T08:00:00\"},\"visibility\":{\"v4\":{\"ris_peers_seeing\":327,\"total_ris_peers\":327},\"v6\":{\"ris_peers_seeing\":0,\"total_ris_peers\":0}},\"origins\":[{\"origin\":3333,\"route_objects\":[\"RIPE\"]}],\"less_specifics\":[],\"more_specifics\":[],\"resource\":\"193.0.0.0/21\"}},\"routingHistory\":{\"data\":{\"resource\":\"193.0.0.0/21\",\"query_starttime\":\"2000-08-01T00:00:00\",\"query_endtime\":\"2026-10-14T08:00:00\",\"time_granularity\":1036800,\"by_origin\":[{\"origin\":\"3333\",\"prefixes\":[{\"prefix\":\"193.0.0.0/21\",\"timelines\":[{\"starttime\":\"2000-10-26T00:00:00\",\"endtime\":\"2000-11-06T23:59:59\",\"full_peers_seeing\":28},{\"starttime\":\"2001-01-18T00:00:00\",\"endtime\":\"2026-10-14T08:00:00\",\"full_peers_seeing\":327}]},{\"prefix\":\"193.0.0.0/22\",\"timelines\":[{\"starttime\":\"2000-08-15T00:00:00\",\"endtime\":\"2000-09-07T23:59:59\",\"full_peers_seeing\":12}]}]},{\"origin\":\"3352\",\"prefixes\":[{\"prefix\":\"193.0.0.0/8\",\"timelines\":[{\"starttime\":\"2007-08-15T00:00:00\",\"endtime\":\"2007-08-26T23:59:59\",\"full_peers_seeing\":40}]}]},{\"origin\":\"15962\",\"prefixes\":[{\"prefix\":\"192.0.0.0/3\",\"timelines\":[{\"starttime\":\"2020-08-06T00:00:00\",\"endtime\":\"2020-08-17T23:59:59\",\"full_peers_seeing\":11}]}]}]}},\"rpki\":[{\"origin\":3333,\"data\":{\"data\":{\"resource\":\"3333\",\"prefix\":\"193.0.0.0/21\",\"validating_roas\":[{\"origin\":\"3333\",\"prefix\":\"193.0.0.0/21\",\"validity\":\"valid\",\"max_length\":21}],\"status\":\"valid\",\"validator\":\"routinator\"}}}],\"lookingGlass\":{\"data\":{\"rrcs\":[{\"rrc\":\"RRC01\",\"location\":\"London, GB\",\"peers\":[{\"asn_origin\":\"3333\",\"as_path\":\"15692 174 1273 3333\",\"prefix\":\"193.0.0.0/21\",\"peer\":\"5.57.80.113\",\"last_updated\":\"2026-10-08T22:38:44\"},{\"asn_origin\":\"3333\",\"as_path\":\"8218 3333\",\"prefix\":\"193.0.0.0/21\",\"peer\":\"5.57.80.210\",\"last_updated\":\"2026-09-01T20:43:50\"},{\"asn_origin\":\"3333\",\"as_path\":\"48070 20562 1103 1103 3333\",\"prefix\":\"193.0.0.0/21\",\"peer\":\"5.57.80.99\",\"last_updated\":\"2026-10-08T20:43:29\"}]}]}}}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BgpRouteExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/cdn-behavior-explorer/calculate": {
      "post": {
        "operationId": "calculateCdnBehaviorExplorer",
        "summary": "Which CDN serves a URL, whether it caches it (HIT/MISS, Age, TTL) and how, from two requests.",
        "description": "Sends two consecutive requests to a public URL (or reads two pasted header sets) and compares them: CDN detection from vendor headers (Cloudflare, CloudFront, Fastly, Akamai, Vercel, Netlify, Bunny, Azure, Google), edge cache status HIT/MISS/EXPIRED, Age progression, edge location, shared-cache TTL, Vary and compression. Only this server's vantage point is used; there is no multi-region comparison.\n\nMethodology:\n- Live mode: two GET requests in a row through the SSRF-guarded fetcher (body capped at 64 KiB each), identical request headers.\n- CDN detection from vendor headers: cf-ray/cf-cache-status (Cloudflare), x-amz-cf-id/x-amz-cf-pop (CloudFront), x-served-by cache-xxx/x-fastly-request-id (Fastly), akamai-grn/x-akamai-*/AkamaiGHost (Akamai), x-vercel-id, x-nf-request-id, BunnyCDN, x-azure-ref, Via: google.\n- Cache status from the vendor header or RFC 9211 Cache-Status (the last listed cache is closest to the client); Age (RFC 9111 §5.1) growing between requests means one stored copy answered both.\n- TTL: CDN-Cache-Control / Surrogate-Control > s-maxage > max-age > Expires − Date. Browser TTL is max-age.\n- Region comparison is not available: tools run from one server. HeaderLens has multi-region probe agents, but they are not wired into tools.",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "cdn_behavior_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CdnBehaviorExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Cloudflare MISS then HIT (pasted)",
                  "value": {
                    "mode": "paste",
                    "headersFirst": "HTTP/2 200\ndate: Mon, 12 Oct 2026 10:00:00 GMT\ncontent-type: text/html; charset=utf-8\ncontent-encoding: br\ncache-control: public, max-age=60, s-maxage=3600\netag: W/\"abc123\"\nvary: Accept-Encoding\ncf-cache-status: MISS\nage: 0\ncf-ray: 8d2f1a2b3c4d5e6f-FRA\nserver: cloudflare\nalt-svc: h3=\":443\"; ma=86400",
                    "headersSecond": "HTTP/2 200\ndate: Mon, 12 Oct 2026 10:00:05 GMT\ncontent-type: text/html; charset=utf-8\ncontent-encoding: br\ncache-control: public, max-age=60, s-maxage=3600\netag: W/\"abc123\"\nvary: Accept-Encoding\ncf-cache-status: HIT\nage: 5\ncf-ray: 8d2f1a2c4e5f6a7b-FRA\nserver: cloudflare\nalt-svc: h3=\":443\"; ma=86400"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CdnBehaviorExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/certificate-transparency-explorer/calculate": {
      "post": {
        "operationId": "calculateCertificateTransparencyExplorer",
        "summary": "Every logged certificate for a domain: history, issuers, subdomains, wildcards and expiry.",
        "description": "Searches Certificate Transparency logs (via crt.sh) for a domain and its subdomains, de-duplicates precertificates, and shows the issuance timeline, which CAs issued over time, subdomains discovered from SANs, wildcard usage, names whose certificates are expiring or expired, and a graph of certificates and the names they cover.\n\nMethodology:\n- Live: crt.sh JSON search for the exact domain and (optionally) %.domain, which matches every name below it; both queries run in parallel with a 20 s timeout.\n- Precertificates and final certificates share issuer + serial number and are merged into one certificate; names come from the common name and SAN list.\n- Per name: first/last issuance and the latest expiry over all certificates. A name is \"expiring\" when its newest certificate expires within the chosen window and no later certificate has been logged yet.\n- Issuers are grouped by the issuer organisation (O=) per year of notBefore. \"Other domains\" are names on the same certificates outside the searched domain (naive last-two-labels grouping).\n- The graph shows the latest 14 certificates and their names (capped at ~60 nodes).",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "certificate_transparency_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CertificateTransparencyExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted crt.sh results for example.net",
                  "value": {
                    "mode": "pasted",
                    "domain": "example.net",
                    "expiringWithinDays": 30,
                    "pasted": "[{\"issuer_ca_id\":432477,\"issuer_name\":\"C=US, O=Let's Encrypt, CN=YR2\",\"common_name\":\"www.example.net\",\"name_value\":\"example.net\\nwww.example.net\",\"id\":29441194038,\"not_before\":\"2026-08-31T23:14:22\",\"not_after\":\"2026-11-29T23:14:21\",\"serial_number\":\"05394f07b853bc55043a45be26fcc01e7d10\"},{\"issuer_ca_id\":432477,\"issuer_name\":\"C=US, O=Let's Encrypt, CN=YR2\",\"common_name\":\"www.example.net\",\"name_value\":\"example.net\\nwww.example.net\",\"id\":29750973274,\"not_before\":\"2026-08-31T23:14:22\",\"not_after\":\"2026-11-29T23:14:21\",\"serial_number\":\"05394f07b853bc55043a45be26fcc01e7d10\"},{\"issuer_ca_id\":432476,\"issuer_name\":\"C=US, O=Let's Encrypt, CN=YR1\",\"common_name\":\"memo.example.net\",\"name_value\":\"memo.example.net\",\"id\":28975558547,\"not_before\":\"2026-08-20T22:27:54\",\"not_after\":\"2026-11-18T22:27:53\",\"serial_number\":\"0554fec7bbaa27fd29acf1bd736e4ad55adc\"},{\"issuer_ca_id\":413868,\"issuer_name\":\"C=US, O=SSL Corporation, CN=Cloudflare TLS Issuing ECC CA 3\",\"common_name\":\"example.net\",\"name_value\":\"*.example.net\\nexample.net\",\"id\":27000000001,\"not_before\":\"2026-07-20T10:00:00\",\"not_after\":\"2026-10-18T10:00:00\",\"serial_number\":\"0ffbc4fba7b8b237ecfda4bf0719133f\"},{\"issuer_ca_id\":432477,\"issuer_name\":\"C=US, O=Let's Encrypt, CN=YR2\",\"common_name\":\"www.example.net\",\"name_value\":\"example.net\\nwww.example.net\",\"id\":27653267941,\"not_before\":\"2026-07-02T22:25:03\",\"not_after\":\"2026-09-30T22:25:02\",\"serial_number\":\"05caf9fdeb36a0076ab7c98d1553a4e1\"},{\"issuer_ca_id\":183267,\"issuer_name\":\"C=US, O=Let's Encrypt, CN=R3\",\"common_name\":\"old-shop.example.net\",\"name_value\":\"old-shop.example.net\\nshop.partner-store.example\",\"id\":9000000001,\"not_before\":\"2023-03-01T08:00:00\",\"not_after\":\"2023-05-30T08:00:00\",\"serial_number\":\"03aa11bb22cc33dd44ee55ff66778899aabb\"},{\"issuer_ca_id\":1449,\"issuer_name\":\"C=US, O=DigiCert Inc, CN=DigiCert TLS RSA SHA256 2020 CA1\",\"common_name\":\"example.net\",\"name_value\":\"example.net\\nwww.example.net\",\"id\":5000000001,\"not_before\":\"2021-12-10T00:00:00\",\"not_after\":\"2023-01-10T23:59:59\",\"serial_number\":\"0a1b2c3d4e5f60718293a4b5c6d7e8f9\"}]"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CertificateTransparencyExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/dns-certificate-explorer/calculate": {
      "post": {
        "operationId": "calculateDnsCertificateExplorer",
        "summary": "DNS records, e-mail security, CAA, live TLS certificate and CT history for a domain.",
        "description": "Resolves A, AAAA, CNAME, MX, NS, TXT, CAA and SOA records, analyses e-mail spoofing protection (SPF lookups and \"all\" policy, DMARC policy and reporting, MTA-STS), fetches the live TLS certificate from the domain's public IP (issuer, SANs, expiry, key, chain, TLS version, browser trust) and lists recent certificates from Certificate Transparency logs via crt.sh.\n\nMethodology:\n- DNS queries via the server's resolver: A, AAAA, CNAME, MX, NS, TXT, CAA, SOA for the domain and TXT at _dmarc.<domain> and _mta-sts.<domain>.\n- SPF (RFC 7208): one record allowed, max 10 DNS-querying mechanisms, policy from the \"all\" qualifier. DMARC (RFC 7489): p=, pct=, rua=.\n- TLS: one connection to the first public IPv4/IPv6 address on port 443 with SNI; the certificate is verified against Node's trusted root store and the hostname (private addresses are never contacted).\n- Certificate Transparency: crt.sh JSON for the exact domain, latest 25 entries (deduplicated by serial, precertificates included).",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "dns_certificate_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DnsCertificateExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "example.com",
                  "value": {
                    "domain": "example.com",
                    "certificateTransparency": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DnsCertificateExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/domain-history-graph/calculate": {
      "post": {
        "operationId": "calculateDomainHistoryGraph",
        "summary": "Registration, DNS, hosting networks, certificates and Wayback captures of a domain as a timeline.",
        "description": "Combines public records about a domain: RDAP registration data (registrar, registration/expiry/last-changed dates, status, name servers, DNSSEC), current A/AAAA/NS/MX records and the networks (ASNs) hosting its addresses via RIPEstat, Certificate Transparency history from crt.sh and first/last Wayback Machine captures. Shows a timeline and a relationship graph. Contact names, e-mails and phone numbers are never displayed.\n\nMethodology:\n- RDAP (RFC 9083) via the rdap.org bootstrap redirector, which forwards to the authoritative registry/registrar RDAP server. Only registrar, dates, status, name servers, DNSSEC and — if published — the registrant organisation and country are shown; contact names, e-mails, phone numbers and street addresses are dropped and only counted.\n- Current DNS (A, AAAA, NS, MX) from this server's resolver; hosting network per public address via RIPEstat network-info (origin ASN + prefix) and as-overview (holder name).\n- Certificate Transparency: crt.sh JSON for the exact domain, deduplicated by serial: first certificate seen, latest issuance, issuing organisations, distinct names.\n- Wayback Machine CDX API: the 10 oldest and 10 newest captures (fl=timestamp,statuscode,digest); digest changes between samples indicate content changes. Totals across all captures are not computed (the index is too large to count cheaply).\n- Paste mode uses the RDAP \"last update of RDAP database\" event as the reference time for age/expiry so results do not depend on when you run it.",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "domain_history_graph",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DomainHistoryGraphInput"
              },
              "examples": {
                "example1": {
                  "summary": "example.com from pasted RDAP + CDX",
                  "value": {
                    "mode": "paste",
                    "domain": "example.com",
                    "rdapJson": "{\n \"objectClassName\": \"domain\",\n \"ldhName\": \"EXAMPLE.COM\",\n \"status\": [\n  \"client delete prohibited\",\n  \"client transfer prohibited\",\n  \"client update prohibited\"\n ],\n \"links\": [\n  {\n   \"rel\": \"self\",\n   \"href\": \"https://rdap.verisign.com/com/v1/domain/example.com\"\n  }\n ],\n \"entities\": [\n  {\n   \"objectClassName\": \"entity\",\n   \"handle\": \"376\",\n   \"roles\": [\n    \"registrar\"\n   ],\n   \"publicIds\": [\n    {\n     \"type\": \"IANA Registrar ID\",\n     \"identifier\": \"376\"\n    }\n   ],\n   \"vcardArray\": [\n    \"vcard\",\n    [\n     [\n      \"version\",\n      {},\n      \"text\",\n      \"4.0\"\n     ],\n     [\n      \"fn\",\n      {},\n      \"text\",\n      \"RESERVED-Internet Assigned Numbers Authority\"\n     ]\n    ]\n   ],\n   \"entities\": [\n    {\n     \"objectClassName\": \"entity\",\n     \"roles\": [\n      \"abuse\"\n     ],\n     \"vcardArray\": [\n      \"vcard\",\n      [\n       [\n        \"version\",\n        {},\n        \"text\",\n        \"4.0\"\n       ],\n       [\n        \"fn\",\n        {},\n        \"text\",\n        \"\"\n       ],\n       [\n        \"tel\",\n        {\n         \"type\": \"voice\"\n        },\n        \"uri\",\n        \"tel:+1.3105551234\"\n       ],\n       [\n        \"email\",\n        {},\n        \"text\",\n        \"abuse@registrar.example\"\n       ]\n      ]\n     ]\n    }\n   ]\n  }\n ],\n \"events\": [\n  {\n   \"eventAction\": \"registration\",\n   \"eventDate\": \"1995-08-14T04:00:00Z\"\n  },\n  {\n   \"eventAction\": \"expiration\",\n   \"eventDate\": \"2027-08-13T04:00:00Z\"\n  },\n  {\n   \"eventAction\": \"last changed\",\n   \"eventDate\": \"2026-08-14T08:01:43Z\"\n  },\n  {\n   \"eventAction\": \"last update of RDAP database\",\n   \"eventDate\": \"2026-10-14T14:23:10Z\"\n  }\n ],\n \"secureDNS\": {\n  \"delegationSigned\": true\n },\n \"nameservers\": [\n  {\n   \"objectClassName\": \"nameserver\",\n   \"ldhName\": \"ELLIOTT.NS.CLOUDFLARE.COM\"\n  },\n  {\n   \"objectClassName\": \"nameserver\",\n   \"ldhName\": \"HERA.NS.CLOUDFLARE.COM\"\n  }\n ]\n}",
                    "cdxRows": "[[\"timestamp\",\"statuscode\",\"digest\"],\n[\"20020120142510\",\"200\",\"HT2DYGA5UKZCPBSFVCV3JOBXGW2G5UUA\"],\n[\"20020328012821\",\"200\",\"UY3I2DT2AMWAY6DECFCFYMT5ZOTFHUCH\"],\n[\"20020524041628\",\"200\",\"UY3I2DT2AMWAY6DECFCFYMT5ZOTFHUCH\"],\n[\"20261014031041\",\"200\",\"U2352G3H6BFNEDPBNQI5XGOBSQAN4W4J\"],\n[\"20261014041142\",\"200\",\"U2352G3H6BFNEDPBNQI5XGOBSQAN4W4J\"],\n[\"20261014064636\",\"200\",\"U2352G3H6BFNEDPBNQI5XGOBSQAN4W4J\"]]"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DomainHistoryGraphResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/email-infrastructure-explorer/calculate": {
      "post": {
        "operationId": "calculateEmailInfrastructureExplorer",
        "summary": "MX, SPF lookups, DMARC, DKIM, MTA-STS, TLS-RPT and BIMI for a domain, scored with fixes.",
        "description": "Checks how a domain receives and protects e-mail: MX hosts with priorities and addresses, SPF with a recursive DNS-lookup count across include: chains, DMARC policy and reporting, DKIM keys at ten common selectors, MTA-STS record and policy file, TLS-RPT and BIMI. Produces a transparent 100-point score and concrete DNS fixes. Works live or on pasted zone records.\n\nMethodology:\n- DNS: MX (+ A/AAAA of each exchange), TXT at the domain, _dmarc, <selector>._domainkey for default, google, selector1, selector2, k1, s1, s2, mail, dkim, mx, _mta-sts, _smtp._tls and default._bimi.\n- SPF (RFC 7208): include: and redirect= are followed recursively; include, a, mx, ptr, exists and redirect each cost one DNS lookup, more than 10 in total is a permerror; more than 2 void lookups is also an error.\n- DMARC (RFC 7489) policy, pct and rua. DKIM (RFC 6376): key type and RSA modulus length decoded from p=; empty p= means revoked. Real selectors are chosen by the sender and cannot be enumerated, so \"none found\" is not proof that DKIM is absent.\n- MTA-STS (RFC 8461): TXT v=STSv1 plus the policy at https://mta-sts.<domain>/.well-known/mta-sts.txt; each MX must match a policy mx: pattern. TLS-RPT (RFC 8460) v=TLSRPTv1 with rua. BIMI needs DMARC quarantine/reject at 100 %.\n- Score (100): MX 10, SPF 20, DMARC 25, DKIM 15, MTA-STS 15, TLS-RPT 10, BIMI 5. Domains with a null MX (no inbound mail) are scored only on SPF and DMARC, scaled to 100.",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "email_infrastructure_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailInfrastructureExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted records for a typical business domain",
                  "value": {
                    "mode": "paste",
                    "domain": "example.org",
                    "records": "; pasted DNS for example.org\n@                      MX   10 mx1.example.net.\n@                      MX   20 mx2.example.net.\nmx1.example.net.    A    192.0.2.10\nmx2.example.net.    A    192.0.2.20\n@                      TXT  \"v=spf1 include:_spf.example.net include:sendgrid.net ip4:198.51.100.0/24 ~all\"\n_spf.example.net.   TXT  \"v=spf1 ip4:192.0.2.0/24 include:_spf2.example.net -all\"\n_spf2.example.net.  TXT  \"v=spf1 a mx -all\"\n_dmarc                 TXT  \"v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@example.org\"\nselector1._domainkey   TXT  \"v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvO65ahmEjafCxJBT+BnCuE+pM97kMp7njI4Na2g3vJ3AIqbUS2lTQVRlUng5T7BKOAHVmKUnj2fWM+iRt5mQAZ649dKjdQwOPULKmoVMjGMH8SB3P6CYaxJrVgS+PGVtEFgcj8UADfED2ylfiZgAPw7Fx3PQxyfWbenvdEsLyjSyl/2fr/stYzeGvaRDjKd91UoPqZEBC3fyw5Eloyq5L/U2yCSJypPpFe04kC6i4OcIlx6bJUkJWMaodPyFd3x1wuS9jklXaF+yyZhBMIdQzNCyf20QM4lf/SjmyzMsyYs5ILkH4548cgWHuM+wGdGHf5GwI6dTFv0a90bL3hlLdQIDAQAB\"\n_mta-sts               TXT  \"v=STSv1; id=20261001T000000\"\n_smtp._tls             TXT  \"v=TLSRPTv1; rua=mailto:tlsrpt@example.org\"",
                    "mtaStsPolicy": "version: STSv1\nmode: testing\nmx: mx1.example.net\nmx: *.example.net\nmax_age: 604800"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailInfrastructureExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/global-dns-explorer/calculate": {
      "post": {
        "operationId": "calculateGlobalDnsExplorer",
        "summary": "Ask every authoritative name server and public resolvers: records, propagation, DNSSEC, mistakes.",
        "description": "Queries each authoritative name server of a domain directly and compares the answers with Google and Cloudflare DNS-over-HTTPS and the local resolver. Shows SOA serial drift (propagation in progress), DNSSEC validation, lame delegation, CNAME at the apex, glue hints, TTLs, and what changed since the previous check.\n\nMethodology:\n- Finds the zone (walking up from the host name until NS records exist) and resolves every name server to its addresses with the server's resolver.\n- Queries SOA, NS, A, AAAA, CNAME, MX, TXT and CAA directly at each authoritative name server (first public IPv4 address; private addresses are never contacted), at Google and Cloudflare DNS-over-HTTPS and at the local resolver.\n- Propagation: different SOA serials between authoritative servers mean secondaries have not yet transferred the latest zone; public resolvers answering differently hold cached data until the TTL expires (or serve location-dependent answers).\n- Lame delegation: a listed name server that refuses, fails (SERVFAIL/NXDOMAIN) or returns no SOA for the zone. Glue: in-zone name servers need A/AAAA glue at the parent; a name server name that does not resolve is flagged.\n- DNSSEC: DS record at the parent (Google DoH) plus the AD (authenticated data) flag from Google and Cloudflare; DS present but SERVFAIL everywhere = bogus.\n- History: each live check stores a snapshot of the authoritative records under sha256(domain); the next check lists added/removed values per record type (up to 20 snapshots kept).",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "global_dns_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GlobalDnsExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted answers: propagation in progress + lame server",
                  "value": {
                    "mode": "pasted",
                    "pasted": "{\n \"domain\": \"example.net\",\n \"zone\": \"example.net\",\n \"dsPresent\": true,\n \"nameservers\": [\n  {\n   \"name\": \"ns1.example.net\",\n   \"addresses\": [\n    \"192.0.2.53\"\n   ]\n  },\n  {\n   \"name\": \"ns2.dns-host.example\",\n   \"addresses\": [\n    \"198.51.100.53\"\n   ]\n  },\n  {\n   \"name\": \"ns3.dns-host.example\",\n   \"addresses\": [\n    \"203.0.113.53\"\n   ]\n  }\n ],\n \"resolvers\": [\n  {\n   \"id\": \"ns:ns1.example.net\",\n   \"label\": \"ns1.example.net (192.0.2.53)\",\n   \"kind\": \"authoritative\",\n   \"status\": \"ok\",\n   \"records\": {\n    \"SOA\": {\n     \"values\": [\n      \"ns1.example.net hostmaster.example.net 2026101402 7200 3600 1209600 3600\"\n     ]\n    },\n    \"NS\": {\n     \"values\": [\n      \"ns1.example.net\",\n      \"ns2.dns-host.example\",\n      \"ns3.dns-host.example\"\n     ]\n    },\n    \"A\": {\n     \"values\": [\n      \"93.184.215.14\"\n     ],\n     \"ttl\": 300\n    },\n    \"AAAA\": {\n     \"values\": [],\n     \"ttl\": null\n    },\n    \"MX\": {\n     \"values\": [\n      \"10 mail.example.net\"\n     ]\n    },\n    \"TXT\": {\n     \"values\": [\n      \"v=spf1 mx -all\"\n     ]\n    },\n    \"CAA\": {\n     \"values\": [\n      \"0 issue \\\"letsencrypt.org\\\"\"\n     ]\n    },\n    \"CNAME\": {\n     \"values\": []\n    }\n   }\n  },\n  {\n   \"id\": \"ns:ns2.dns-host.example\",\n   \"label\": \"ns2.dns-host.example (198.51.100.53)\",\n   \"kind\": \"authoritative\",\n   \"status\": \"ok\",\n   \"records\": {\n    \"SOA\": {\n     \"values\": [\n      \"ns1.example.net hostmaster.example.net 2026101401 7200 3600 1209600 3600\"\n     ]\n    },\n    \"NS\": {\n     \"values\": [\n      \"ns1.example.net\",\n      \"ns2.dns-host.example\",\n      \"ns3.dns-host.example\"\n     ]\n    },\n    \"A\": {\n     \"values\": [\n      \"93.184.216.34\"\n     ],\n     \"ttl\": 300\n    },\n    \"AAAA\": {\n     \"values\": []\n    },\n    \"MX\": {\n     \"values\": [\n      \"10 mail.example.net\"\n     ]\n    },\n    \"TXT\": {\n     \"values\": [\n      \"v=spf1 mx -all\"\n     ]\n    },\n    \"CAA\": {\n     \"values\": [\n      \"0 issue \\\"letsencrypt.org\\\"\"\n     ]\n    },\n    \"CNAME\": {\n     \"values\": []\n    }\n   }\n  },\n  {\n   \"id\": \"ns:ns3.dns-host.example\",\n   \"label\": \"ns3.dns-host.example (203.0.113.53)\",\n   \"kind\": \"authoritative\",\n   \"status\": \"refused\",\n   \"error\": \"EREFUSED\",\n   \"records\": {}\n  },\n  {\n   \"id\": \"doh:google\",\n   \"label\": \"Google Public DNS (DoH)\",\n   \"kind\": \"public-doh\",\n   \"status\": \"ok\",\n   \"ad\": true,\n   \"records\": {\n    \"SOA\": {\n     \"values\": [\n      \"ns1.example.net. hostmaster.example.net. 2026101401 7200 3600 1209600 3600\"\n     ],\n     \"ttl\": 1800\n    },\n    \"NS\": {\n     \"values\": [\n      \"ns1.example.net.\",\n      \"ns2.dns-host.example.\",\n      \"ns3.dns-host.example.\"\n     ],\n     \"ttl\": 86400\n    },\n    \"A\": {\n     \"values\": [\n      \"93.184.216.34\"\n     ],\n     \"ttl\": 212\n    },\n    \"MX\": {\n     \"values\": [\n      \"10 mail.example.net.\"\n     ],\n     \"ttl\": 3600\n    },\n    \"TXT\": {\n     \"values\": [\n      \"\\\"v=spf1 mx -all\\\"\"\n     ],\n     \"ttl\": 3600\n    },\n    \"CAA\": {\n     \"values\": [\n      \"0 issue \\\"letsencrypt.org\\\"\"\n     ],\n     \"ttl\": 3600\n    },\n    \"AAAA\": {\n     \"values\": []\n    },\n    \"CNAME\": {\n     \"values\": []\n    }\n   }\n  },\n  {\n   \"id\": \"doh:cloudflare\",\n   \"label\": \"Cloudflare 1.1.1.1 (DoH)\",\n   \"kind\": \"public-doh\",\n   \"status\": \"ok\",\n   \"ad\": true,\n   \"records\": {\n    \"SOA\": {\n     \"values\": [\n      \"ns1.example.net. hostmaster.example.net. 2026101402 7200 3600 1209600 3600\"\n     ],\n     \"ttl\": 3600\n    },\n    \"A\": {\n     \"values\": [\n      \"93.184.215.14\"\n     ],\n     \"ttl\": 300\n    },\n    \"MX\": {\n     \"values\": [\n      \"10 mail.example.net.\"\n     ],\n     \"ttl\": 3600\n    }\n   }\n  }\n ]\n}",
                    "trackChanges": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GlobalDnsExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/http-technology-explorer/calculate": {
      "post": {
        "operationId": "calculateHttpTechnologyExplorer",
        "summary": "Headers, compression, caching, HTTP/2-3 hints, redirects, security and tech stack for a URL.",
        "description": "Fetches a public URL (or analyses pasted raw response headers and HTML) and explains what the response reveals: redirect target and HTTPS upgrade, HTTP/2 and HTTP/3 advertisement (Alt-Svc), compression, caching (Cache-Control, ETag, Last-Modified, Age, Vary), security headers, and server, framework, CMS and analytics fingerprints with a confidence level for each.\n\nMethodology:\n- Live mode: one GET of the URL through the platform's SSRF-guarded fetcher (redirects followed and re-validated, ports 80/443 only, body capped at 512 KiB), plus a small GET of the http:// variant to see whether plain HTTP is upgraded to HTTPS.\n- The fetcher speaks HTTP/1.1, so HTTP/2 and HTTP/3 support is inferred from the Alt-Svc header (h2/h3); pasted headers show the real protocol in their status line.\n- Caching follows RFC 9111: no-store, private, no-cache, s-maxage > max-age > Expires-Date; CDN-Cache-Control/Surrogate-Control override for shared caches.\n- Security headers use the same deterministic rules as HeaderLens (HSTS, CSP, nosniff, framing, Referrer-Policy, Permissions-Policy, validators, Vary, compression, version disclosure).\n- Technology fingerprints come from response headers (Server, X-Powered-By, vendor headers) and HTML markers (meta generator, well-known asset paths such as /wp-content/, /_next/static/, /_nuxt/). Confidence: high = explicit self-identification, medium = characteristic path, low = weak hint.",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "http_technology_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HttpTechnologyExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "WordPress shop behind nginx (pasted)",
                  "value": {
                    "mode": "paste",
                    "rawHeaders": "HTTP/1.1 301 Moved Permanently\nLocation: https://www.example-shop.test/\nServer: nginx\n\nHTTP/2 200\nserver: nginx/1.24.0\ndate: Mon, 12 Oct 2026 10:00:00 GMT\ncontent-type: text/html; charset=UTF-8\ncontent-encoding: br\nvary: Accept-Encoding, Cookie\ncache-control: public, max-age=300, s-maxage=600\netag: \"5f2a-63c1\"\nlast-modified: Mon, 12 Oct 2026 09:30:00 GMT\nage: 42\nx-powered-by: PHP/8.2.12\nlink: <https://www.example-shop.test/wp-json/>; rel=\"https://api.w.org/\"\nalt-svc: h3=\":443\"; ma=86400\nstrict-transport-security: max-age=31536000; includeSubDomains\nx-content-type-options: nosniff\nreferrer-policy: strict-origin-when-cross-origin\nset-cookie: session=abc123; Path=/; Secure; HttpOnly; SameSite=Lax",
                    "html": "<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><title>Example shop</title>\n<meta name=\"generator\" content=\"WordPress 6.6.2\">\n<link rel=\"stylesheet\" href=\"/wp-content/themes/shop/style.css\">\n<script src=\"/wp-includes/js/jquery/jquery.min.js?ver=3.7.1\"></script>\n<script async src=\"https://www.googletagmanager.com/gtag/js?id=G-TEST123\"></script>\n</head><body><h1>Example shop</h1></body></html>"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HttpTechnologyExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/internet-outage-atlas/calculate": {
      "post": {
        "operationId": "calculateInternetOutageAtlas",
        "summary": "Correlate public outage signals (IODA, RIPEstat BGP, live probe) for a country, ASN or domain.",
        "description": "Builds a timeline of internet disruptions for a country, network (ASN) or domain by correlating IODA outage alerts and events (BGP, active probing, telescope, traffic signals from Georgia Tech), RIPEstat routing visibility and BGP update bursts, and a direct reachability probe of the domain. Overlapping signals from independent sources are marked as corroborated; single-signal events stay flagged as uncertain.\n\nMethodology:\n- IODA (Internet Outage Detection and Analysis, Georgia Tech) v2 API: /outages/alerts and /outages/events for entityType country or asn over the look-back window. IODA compares BGP-visible /24 blocks, active-probing responses, darknet telescope traffic and Google/Mozilla traffic against their recent history.\n- Alerts are paired per data source (non-normal alert → next \"normal\" alert) into episodes; an episode without a recovery alert is treated as ongoing.\n- For ASNs (and the ASN hosting a domain's first public IPv4/IPv6 address, via RIPEstat network-info) RIPEstat routing-status gives RIS peer visibility and announced prefixes; bgp-update-activity hours above max(3 × median, 100) updates are flagged as BGP bursts.\n- Domains are also probed directly with one HTTPS GET from this server (reachable = any HTTP response below 500).\n- Intervals from different sources that overlap (30-minute slack) are merged into incidents; ≥2 independent signals = corroborated, otherwise single-signal (could be measurement noise).",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "internet_outage_atlas",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InternetOutageAtlasInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted IODA alerts for a country (illustrative)",
                  "value": {
                    "mode": "paste",
                    "target": "IR",
                    "targetType": "country",
                    "pastedJson": "{\n \"type\": \"outages.alerts\",\n \"data\": [\n  {\n   \"datasource\": \"bgp\",\n   \"entity\": {\n    \"code\": \"IR\",\n    \"name\": \"Iran (Islamic Republic Of)\",\n    \"type\": \"country\"\n   },\n   \"time\": 1791231300,\n   \"level\": \"critical\",\n   \"condition\": \"< 0.99\",\n   \"value\": 41245,\n   \"historyValue\": 41687,\n   \"method\": \"median\"\n  },\n  {\n   \"datasource\": \"ping-slash24\",\n   \"entity\": {\n    \"code\": \"IR\",\n    \"name\": \"Iran (Islamic Republic Of)\",\n    \"type\": \"country\"\n   },\n   \"time\": 1791232200,\n   \"level\": \"critical\",\n   \"condition\": \"< 0.8\",\n   \"value\": 61200,\n   \"historyValue\": 88400,\n   \"method\": \"median\"\n  },\n  {\n   \"datasource\": \"ping-slash24\",\n   \"entity\": {\n    \"code\": \"IR\",\n    \"name\": \"Iran (Islamic Republic Of)\",\n    \"type\": \"country\"\n   },\n   \"time\": 1791241200,\n   \"level\": \"normal\",\n   \"condition\": \"normal\",\n   \"value\": 87900,\n   \"historyValue\": 88400,\n   \"method\": \"median\"\n  },\n  {\n   \"datasource\": \"bgp\",\n   \"entity\": {\n    \"code\": \"IR\",\n    \"name\": \"Iran (Islamic Republic Of)\",\n    \"type\": \"country\"\n   },\n   \"time\": 1791244200,\n   \"level\": \"normal\",\n   \"condition\": \"normal\",\n   \"value\": 41278,\n   \"historyValue\": 41687,\n   \"method\": \"median\"\n  },\n  {\n   \"datasource\": \"merit-nt\",\n   \"entity\": {\n    \"code\": \"IR\",\n    \"name\": \"Iran (Islamic Republic Of)\",\n    \"type\": \"country\"\n   },\n   \"time\": 1791727500,\n   \"level\": \"warning\",\n   \"condition\": \"< 0.9\",\n   \"value\": 1800,\n   \"historyValue\": 2100,\n   \"method\": \"median\"\n  },\n  {\n   \"datasource\": \"merit-nt\",\n   \"entity\": {\n    \"code\": \"IR\",\n    \"name\": \"Iran (Islamic Republic Of)\",\n    \"type\": \"country\"\n   },\n   \"time\": 1791728400,\n   \"level\": \"normal\",\n   \"condition\": \"normal\",\n   \"value\": 2080,\n   \"historyValue\": 2100,\n   \"method\": \"median\"\n  }\n ]\n}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternetOutageAtlasResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tools/ipv6-readiness-explorer/calculate": {
      "post": {
        "operationId": "calculateIpv6ReadinessExplorer",
        "summary": "Is a domain reachable over IPv6? Web, DNS and mail checks, address classes and a scored report.",
        "description": "Checks AAAA records for a domain and its www host, IPv6 addresses of its name servers and mail servers, classifies every IPv6 address (global unicast vs ULA, link-local, documentation, 6to4, Teredo, NAT64 …), optionally opens a TCP connection to port 443 over IPv6, and turns it into a score with every check explained.\n\nMethodology:\n- Resolves A and AAAA for the domain and www.<domain>, the NS host names and the MX host names (up to 10) with this server's resolver.\n- Every IPv6 address is classified against the IANA IPv6 special-purpose registry: only global unicast (2000::/3 minus special blocks) is reachable from the internet.\n- Score (points, n/a checks are excluded from the maximum): apex AAAA 25, www AAAA 15, any name server with IPv6 20, all name servers with IPv6 10, MX with IPv6 15 (pro rata), no special-purpose addresses 5, TCP 443 over IPv6 10. Grade A ≥ 90, B ≥ 75, C ≥ 50, D ≥ 25.\n- Connect test: up to 3 global AAAA addresses of the domain/www, TCP handshake on port 443 with a 5 s timeout. If this server itself has no IPv6 route (ENETUNREACH/EADDRNOTAVAIL), the test is reported as not possible instead of counted as a failure.",
        "tags": [
          "infrastructure"
        ],
        "x-mcp-tool": "ipv6_readiness_explorer",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Ipv6ReadinessExplorerInput"
              },
              "examples": {
                "example1": {
                  "summary": "Pasted record set: partial IPv6",
                  "value": {
                    "mode": "pasted",
                    "pasted": "{\n \"domain\": \"example.net\",\n \"hosts\": [\n  {\n   \"name\": \"example.net\",\n   \"ipv4\": [\n    \"93.184.215.14\"\n   ],\n   \"ipv6\": [\n    \"2606:2800:21f:cb07:6820:80da:af6b:8b2c\"\n   ]\n  },\n  {\n   \"name\": \"www.example.net\",\n   \"ipv4\": [\n    \"93.184.215.14\"\n   ],\n   \"ipv6\": []\n  }\n ],\n \"nameservers\": [\n  {\n   \"name\": \"ns1.dns-host.example\",\n   \"ipv4\": [\n    \"198.51.100.53\"\n   ],\n   \"ipv6\": [\n    \"2a00:1450:4001:c0f::35\"\n   ]\n  },\n  {\n   \"name\": \"ns2.dns-host.example\",\n   \"ipv4\": [\n    \"203.0.113.53\"\n   ],\n   \"ipv6\": []\n  }\n ],\n \"mx\": [\n  {\n   \"name\": \"mail.example.net\",\n   \"priority\": 10,\n   \"ipv4\": [\n    \"198.51.100.25\"\n   ],\n   \"ipv6\": [\n    \"fd00:25::1\"\n   ]\n  }\n ],\n \"connect\": [\n  {\n   \"host\": \"example.net\",\n   \"address\": \"2606:2800:21f:cb07:6820:80da:af6b:8b2c\",\n   \"ok\": false,\n   \"code\": \"ENETUNREACH\",\n   \"ms\": null\n  }\n ]\n}"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ipv6ReadinessExplorerResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/workflows": {
      "get": {
        "operationId": "listWorkflows",
        "summary": "Multi-tool workflows",
        "responses": {
          "200": {
            "description": "Workflow list.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. 422 responses include per-field `errors`.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "message"
              ],
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "AsnRelationshipExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "pasted"
            ],
            "default": "live"
          },
          "asn": {
            "title": "AS number",
            "type": "string",
            "maxLength": 14
          },
          "maxNeighbours": {
            "title": "Neighbours in the graph",
            "type": "integer",
            "minimum": 1,
            "maximum": 55,
            "default": 25
          },
          "pasted": {
            "title": "RIPEstat responses (JSON)",
            "description": "Pasted mode: {asn, asOverview, asnNeighbours?, announcedPrefixes?, rirStatsCountry?} — full RIPEstat responses or their \"data\" objects.",
            "type": "string",
            "maxLength": 200000
          }
        },
        "required": []
      },
      "AsnRelationshipExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "asn",
              "holder",
              "country",
              "announced",
              "block",
              "neighbourCounts",
              "neighbours",
              "prefixCounts",
              "prefixes",
              "queryTime",
              "prefixWindow",
              "findings"
            ],
            "properties": {
              "asn": {
                "type": "integer"
              },
              "holder": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "country": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "announced": {
                "type": "boolean"
              },
              "block": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "resource",
                  "description"
                ],
                "properties": {
                  "resource": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  }
                }
              },
              "neighbourCounts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "left",
                  "right",
                  "uncertain",
                  "unique"
                ],
                "properties": {
                  "left": {
                    "type": "integer"
                  },
                  "right": {
                    "type": "integer"
                  },
                  "uncertain": {
                    "type": "integer"
                  },
                  "unique": {
                    "type": "integer"
                  }
                }
              },
              "neighbours": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "asn",
                    "type",
                    "power",
                    "v4Peers",
                    "v6Peers",
                    "holder"
                  ],
                  "properties": {
                    "asn": {
                      "type": "integer"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "left",
                        "right",
                        "uncertain"
                      ]
                    },
                    "power": {
                      "type": "integer"
                    },
                    "v4Peers": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "v6Peers": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "holder": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "prefixCounts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "ipv4",
                  "ipv6",
                  "ipv4Slash24Equivalents",
                  "ipv6Slash48Equivalents"
                ],
                "properties": {
                  "ipv4": {
                    "type": "integer"
                  },
                  "ipv6": {
                    "type": "integer"
                  },
                  "ipv4Slash24Equivalents": {
                    "type": "integer"
                  },
                  "ipv6Slash48Equivalents": {
                    "type": "integer"
                  }
                }
              },
              "prefixes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "prefix",
                    "family",
                    "firstSeen",
                    "lastSeen",
                    "periods"
                  ],
                  "properties": {
                    "prefix": {
                      "type": "string"
                    },
                    "family": {
                      "type": "string",
                      "enum": [
                        "IPv4",
                        "IPv6"
                      ]
                    },
                    "firstSeen": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "lastSeen": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "periods": {
                      "type": "integer"
                    }
                  }
                }
              },
              "queryTime": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "prefixWindow": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "start",
                  "end"
                ],
                "properties": {
                  "start": {
                    "type": "string"
                  },
                  "end": {
                    "type": "string"
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "area",
                    "finding"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low",
                        "info"
                      ]
                    },
                    "area": {
                      "type": "string"
                    },
                    "finding": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "BgpRouteExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "pasted"
            ],
            "default": "live"
          },
          "resource": {
            "title": "IP address or prefix",
            "type": "string",
            "maxLength": 60
          },
          "lookingGlass": {
            "title": "Include current AS paths (RIS looking glass)",
            "type": "boolean",
            "default": true
          },
          "pasted": {
            "title": "RIPEstat responses (JSON)",
            "description": "Pasted mode: {resource?, prefixOverview, routingStatus?, routingHistory?, rpki?: [{origin, data}], lookingGlass?} — full RIPEstat responses or their \"data\" objects.",
            "type": "string",
            "maxLength": 200000
          }
        },
        "required": []
      },
      "BgpRouteExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "queried",
              "prefix",
              "family",
              "announced",
              "block",
              "origins",
              "visibility",
              "firstSeen",
              "lastSeen",
              "moreSpecifics",
              "moreSpecificsCount",
              "lessSpecifics",
              "history",
              "historicalOrigins",
              "events",
              "lookingGlass",
              "findings"
            ],
            "properties": {
              "queried": {
                "type": "string"
              },
              "prefix": {
                "type": "string"
              },
              "family": {
                "type": "string",
                "enum": [
                  "IPv4",
                  "IPv6"
                ]
              },
              "announced": {
                "type": "boolean"
              },
              "block": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "resource",
                  "description"
                ],
                "properties": {
                  "resource": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  }
                }
              },
              "origins": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "asn",
                    "holder",
                    "rpki",
                    "validatingRoas",
                    "irrRouteObjects"
                  ],
                  "properties": {
                    "asn": {
                      "type": "integer"
                    },
                    "holder": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "rpki": {
                      "type": "string",
                      "enum": [
                        "valid",
                        "invalid_asn",
                        "invalid_length",
                        "unknown",
                        "not-checked"
                      ]
                    },
                    "validatingRoas": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "origin",
                          "prefix",
                          "maxLength",
                          "validity"
                        ],
                        "properties": {
                          "origin": {
                            "type": "integer"
                          },
                          "prefix": {
                            "type": "string"
                          },
                          "maxLength": {
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "validity": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "irrRouteObjects": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "visibility": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "family",
                  "peersSeeing",
                  "totalPeers",
                  "percent"
                ],
                "properties": {
                  "family": {
                    "type": "string"
                  },
                  "peersSeeing": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "totalPeers": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "percent": {
                    "type": [
                      "number",
                      "null"
                    ]
                  }
                }
              },
              "firstSeen": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "time",
                  "origin",
                  "prefix"
                ],
                "properties": {
                  "time": {
                    "type": "string"
                  },
                  "origin": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "prefix": {
                    "type": "string"
                  }
                }
              },
              "lastSeen": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "time",
                  "origin",
                  "prefix"
                ],
                "properties": {
                  "time": {
                    "type": "string"
                  },
                  "origin": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "prefix": {
                    "type": "string"
                  }
                }
              },
              "moreSpecifics": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "prefix",
                    "origin"
                  ],
                  "properties": {
                    "prefix": {
                      "type": "string"
                    },
                    "origin": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  }
                }
              },
              "moreSpecificsCount": {
                "type": "integer"
              },
              "lessSpecifics": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "prefix",
                    "origin"
                  ],
                  "properties": {
                    "prefix": {
                      "type": "string"
                    },
                    "origin": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  }
                }
              },
              "history": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "origin",
                    "prefix",
                    "firstSeen",
                    "lastSeen",
                    "segments",
                    "current",
                    "maxPeersSeeing"
                  ],
                  "properties": {
                    "origin": {
                      "type": "integer"
                    },
                    "prefix": {
                      "type": "string"
                    },
                    "firstSeen": {
                      "type": "string"
                    },
                    "lastSeen": {
                      "type": "string"
                    },
                    "segments": {
                      "type": "integer"
                    },
                    "current": {
                      "type": "boolean"
                    },
                    "maxPeersSeeing": {
                      "type": [
                        "number",
                        "null"
                      ]
                    }
                  }
                }
              },
              "historicalOrigins": {
                "type": "array",
                "items": {
                  "type": "integer"
                }
              },
              "events": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "time",
                    "label",
                    "detail",
                    "tone"
                  ],
                  "properties": {
                    "time": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string"
                    },
                    "tone": {
                      "type": "string"
                    }
                  }
                }
              },
              "lookingGlass": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "collectors",
                  "peers",
                  "upstreams",
                  "averagePathLength",
                  "samplePaths"
                ],
                "properties": {
                  "collectors": {
                    "type": "integer"
                  },
                  "peers": {
                    "type": "integer"
                  },
                  "averagePathLength": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "upstreams": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "asn",
                        "paths"
                      ],
                      "properties": {
                        "asn": {
                          "type": "integer"
                        },
                        "paths": {
                          "type": "integer"
                        }
                      }
                    }
                  },
                  "samplePaths": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "collector",
                        "peer",
                        "path",
                        "lastUpdated"
                      ],
                      "properties": {
                        "collector": {
                          "type": "string"
                        },
                        "peer": {
                          "type": "string"
                        },
                        "path": {
                          "type": "string"
                        },
                        "lastUpdated": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "area",
                    "finding"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low",
                        "info"
                      ]
                    },
                    "area": {
                      "type": "string"
                    },
                    "finding": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "CdnBehaviorExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "paste"
            ],
            "default": "live"
          },
          "url": {
            "title": "URL (live mode)",
            "type": "string",
            "format": "uri"
          },
          "headersFirst": {
            "title": "Response headers of request 1 (paste mode)",
            "type": "string",
            "maxLength": 30000
          },
          "headersSecond": {
            "title": "Response headers of request 2 (paste mode)",
            "type": "string",
            "maxLength": 30000
          }
        },
        "required": []
      },
      "CdnBehaviorExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "mode",
              "url",
              "cdns",
              "requests",
              "verdict",
              "explanation",
              "ageDelta",
              "dateDelta",
              "etagStable",
              "caching",
              "regionComparison"
            ],
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "live",
                  "paste"
                ]
              },
              "url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "cdns": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "cdn",
                    "confidence",
                    "evidence"
                  ],
                  "properties": {
                    "cdn": {
                      "type": "string"
                    },
                    "confidence": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low"
                      ]
                    },
                    "evidence": {
                      "type": "string"
                    }
                  }
                }
              },
              "requests": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "status",
                    "cacheStatus",
                    "cacheHeader",
                    "age",
                    "date",
                    "etag",
                    "pop",
                    "encoding"
                  ],
                  "properties": {
                    "status": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "cacheStatus": {
                      "type": "string"
                    },
                    "cacheHeader": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "age": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "date": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "etag": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "pop": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "encoding": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "verdict": {
                "type": "string",
                "enum": [
                  "edge-cached",
                  "warmed-on-second-request",
                  "not-cached-at-edge",
                  "bypassed",
                  "no-cdn-detected",
                  "inconclusive"
                ]
              },
              "explanation": {
                "type": "string"
              },
              "ageDelta": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "dateDelta": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "etagStable": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "caching": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "verdict",
                  "cacheControl",
                  "cdnCacheControl",
                  "surrogateControl",
                  "sharedTtl",
                  "browserTtl",
                  "vary"
                ],
                "properties": {
                  "verdict": {
                    "type": "string"
                  },
                  "cacheControl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "cdnCacheControl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "surrogateControl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "sharedTtl": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "browserTtl": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "vary": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "regionComparison": {
                "type": "string"
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "CertificateTransparencyExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "pasted"
            ],
            "default": "live"
          },
          "domain": {
            "title": "Domain",
            "description": "Also used in pasted mode to tell subdomains from other domains.",
            "type": "string",
            "maxLength": 253
          },
          "includeSubdomains": {
            "title": "Include subdomains (%.domain, slower)",
            "type": "boolean",
            "default": true
          },
          "expiringWithinDays": {
            "title": "Warn when a name expires within",
            "type": "integer",
            "minimum": 1,
            "maximum": 365,
            "default": 30,
            "x-unit": "days"
          },
          "pasted": {
            "title": "crt.sh JSON",
            "description": "Pasted mode: the JSON array from https://crt.sh/?q=example.com&output=json",
            "type": "string",
            "maxLength": 200000
          }
        },
        "required": []
      },
      "CertificateTransparencyExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "domain",
              "counts",
              "certificates",
              "names",
              "subdomains",
              "wildcards",
              "relatedDomains",
              "issuers",
              "issuersOverTime",
              "findings"
            ],
            "properties": {
              "domain": {
                "type": "string"
              },
              "counts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "certificates",
                  "valid",
                  "expiring",
                  "expired",
                  "wildcardCertificates"
                ],
                "properties": {
                  "certificates": {
                    "type": "integer"
                  },
                  "valid": {
                    "type": "integer"
                  },
                  "expiring": {
                    "type": "integer"
                  },
                  "expired": {
                    "type": "integer"
                  },
                  "wildcardCertificates": {
                    "type": "integer"
                  }
                }
              },
              "certificates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "serial",
                    "crtShIds",
                    "issuer",
                    "issuerOrg",
                    "names",
                    "notBefore",
                    "notAfter",
                    "validityDays",
                    "wildcard",
                    "state"
                  ],
                  "properties": {
                    "serial": {
                      "type": "string"
                    },
                    "crtShIds": {
                      "type": "array",
                      "items": {
                        "type": "integer"
                      }
                    },
                    "issuer": {
                      "type": "string"
                    },
                    "issuerOrg": {
                      "type": "string"
                    },
                    "names": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "notBefore": {
                      "type": "string"
                    },
                    "notAfter": {
                      "type": "string"
                    },
                    "validityDays": {
                      "type": "integer"
                    },
                    "wildcard": {
                      "type": "boolean"
                    },
                    "state": {
                      "type": "string",
                      "enum": [
                        "valid",
                        "expiring",
                        "expired",
                        "not-yet-valid"
                      ]
                    }
                  }
                }
              },
              "names": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "inDomain",
                    "wildcard",
                    "firstSeen",
                    "lastSeen",
                    "latestExpiry",
                    "certificates",
                    "issuers",
                    "coverage"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "inDomain": {
                      "type": "boolean"
                    },
                    "wildcard": {
                      "type": "boolean"
                    },
                    "firstSeen": {
                      "type": "string"
                    },
                    "lastSeen": {
                      "type": "string"
                    },
                    "latestExpiry": {
                      "type": "string"
                    },
                    "certificates": {
                      "type": "integer"
                    },
                    "issuers": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "coverage": {
                      "type": "string",
                      "enum": [
                        "covered",
                        "expiring",
                        "expired"
                      ]
                    }
                  }
                }
              },
              "subdomains": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "inDomain",
                    "wildcard",
                    "firstSeen",
                    "lastSeen",
                    "latestExpiry",
                    "certificates",
                    "issuers",
                    "coverage"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "inDomain": {
                      "type": "boolean"
                    },
                    "wildcard": {
                      "type": "boolean"
                    },
                    "firstSeen": {
                      "type": "string"
                    },
                    "lastSeen": {
                      "type": "string"
                    },
                    "latestExpiry": {
                      "type": "string"
                    },
                    "certificates": {
                      "type": "integer"
                    },
                    "issuers": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "coverage": {
                      "type": "string",
                      "enum": [
                        "covered",
                        "expiring",
                        "expired"
                      ]
                    }
                  }
                }
              },
              "wildcards": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "inDomain",
                    "wildcard",
                    "firstSeen",
                    "lastSeen",
                    "latestExpiry",
                    "certificates",
                    "issuers",
                    "coverage"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "inDomain": {
                      "type": "boolean"
                    },
                    "wildcard": {
                      "type": "boolean"
                    },
                    "firstSeen": {
                      "type": "string"
                    },
                    "lastSeen": {
                      "type": "string"
                    },
                    "latestExpiry": {
                      "type": "string"
                    },
                    "certificates": {
                      "type": "integer"
                    },
                    "issuers": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "coverage": {
                      "type": "string",
                      "enum": [
                        "covered",
                        "expiring",
                        "expired"
                      ]
                    }
                  }
                }
              },
              "relatedDomains": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "issuers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "issuer",
                    "certificates",
                    "firstIssued",
                    "lastIssued"
                  ],
                  "properties": {
                    "issuer": {
                      "type": "string"
                    },
                    "certificates": {
                      "type": "integer"
                    },
                    "firstIssued": {
                      "type": "string"
                    },
                    "lastIssued": {
                      "type": "string"
                    }
                  }
                }
              },
              "issuersOverTime": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "year",
                    "issuers"
                  ],
                  "properties": {
                    "year": {
                      "type": "string"
                    },
                    "issuers": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "issuer",
                          "count"
                        ],
                        "properties": {
                          "issuer": {
                            "type": "string"
                          },
                          "count": {
                            "type": "integer"
                          }
                        }
                      }
                    }
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "area",
                    "finding"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low",
                        "info"
                      ]
                    },
                    "area": {
                      "type": "string"
                    },
                    "finding": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "DnsCertificateExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "domain": {
            "title": "Domain",
            "type": "string",
            "maxLength": 253
          },
          "certificateTransparency": {
            "title": "Include Certificate Transparency history (crt.sh, slower)",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "domain"
        ]
      },
      "DnsCertificateExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "domain",
              "records",
              "email",
              "caaIssuers",
              "certificate",
              "ctLog",
              "findings"
            ],
            "properties": {
              "domain": {
                "type": "string"
              },
              "records": {
                "type": "object",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "email": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "spf",
                  "spfLookups",
                  "dmarc",
                  "dmarcPolicy",
                  "mtaSts"
                ],
                "properties": {
                  "spf": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "spfLookups": {
                    "type": "integer"
                  },
                  "dmarc": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "dmarcPolicy": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "mtaSts": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "caaIssuers": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "certificate": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "subject",
                  "issuer",
                  "validFrom",
                  "validTo",
                  "daysLeft",
                  "san",
                  "keyType",
                  "keyBits",
                  "serialNumber",
                  "fingerprint256",
                  "chainLength",
                  "hostnameMatches",
                  "authorized",
                  "authorizationError",
                  "protocol",
                  "servedFrom"
                ],
                "properties": {
                  "subject": {
                    "type": "string"
                  },
                  "issuer": {
                    "type": "string"
                  },
                  "validFrom": {
                    "type": "string"
                  },
                  "validTo": {
                    "type": "string"
                  },
                  "daysLeft": {
                    "type": "integer"
                  },
                  "san": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "keyType": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "keyBits": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "serialNumber": {
                    "type": "string"
                  },
                  "fingerprint256": {
                    "type": "string"
                  },
                  "chainLength": {
                    "type": "integer"
                  },
                  "hostnameMatches": {
                    "type": "boolean"
                  },
                  "authorized": {
                    "type": "boolean"
                  },
                  "authorizationError": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "protocol": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "servedFrom": {
                    "type": "string"
                  }
                }
              },
              "ctLog": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "issuer",
                    "names",
                    "notBefore",
                    "notAfter"
                  ],
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "issuer": {
                      "type": "string"
                    },
                    "names": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "notBefore": {
                      "type": "string"
                    },
                    "notAfter": {
                      "type": "string"
                    }
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "area",
                    "finding"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low",
                        "info"
                      ]
                    },
                    "area": {
                      "type": "string"
                    },
                    "finding": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "DomainHistoryGraphInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "paste"
            ],
            "default": "live"
          },
          "domain": {
            "title": "Domain",
            "type": "string",
            "maxLength": 253
          },
          "certificateTransparency": {
            "title": "Include Certificate Transparency history (crt.sh, slower)",
            "type": "boolean",
            "default": true
          },
          "rdapJson": {
            "title": "RDAP JSON (paste mode)",
            "type": "string",
            "maxLength": 300000
          },
          "cdxRows": {
            "title": "Wayback CDX rows (paste mode, optional)",
            "description": "JSON output (fl=timestamp,statuscode,digest) or plain CDX lines.",
            "type": "string",
            "maxLength": 300000
          },
          "ctJson": {
            "title": "crt.sh JSON (paste mode, optional)",
            "type": "string",
            "maxLength": 1000000
          }
        },
        "required": [
          "domain"
        ]
      },
      "DomainHistoryGraphResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "domain",
              "mode",
              "referenceTime",
              "registration",
              "ageYears",
              "daysToExpiry",
              "dns",
              "hosting",
              "certificates",
              "wayback",
              "findings"
            ],
            "properties": {
              "domain": {
                "type": "string"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "live",
                  "paste"
                ]
              },
              "referenceTime": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "registration": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "ldhName",
                  "registrar",
                  "registrarIanaId",
                  "registrantOrganization",
                  "registrantCountry",
                  "status",
                  "nameservers",
                  "dnssec",
                  "events",
                  "contactRoles",
                  "redactedContactFields",
                  "rdapServer"
                ],
                "properties": {
                  "ldhName": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "registrar": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "registrarIanaId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "registrantOrganization": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "registrantCountry": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "status": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "nameservers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "dnssec": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "events": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "action",
                        "date"
                      ],
                      "properties": {
                        "action": {
                          "type": "string"
                        },
                        "date": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "contactRoles": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "redactedContactFields": {
                    "type": "integer"
                  },
                  "rdapServer": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "ageYears": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "daysToExpiry": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "dns": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "hosting": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "ip",
                    "prefix",
                    "asn",
                    "holder"
                  ],
                  "properties": {
                    "ip": {
                      "type": "string"
                    },
                    "prefix": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "asn": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "holder": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "certificates": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "certificates",
                  "firstSeen",
                  "latestIssued",
                  "issuers",
                  "names"
                ],
                "properties": {
                  "certificates": {
                    "type": "integer"
                  },
                  "firstSeen": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "latestIssued": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "issuers": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "issuer",
                        "count"
                      ],
                      "properties": {
                        "issuer": {
                          "type": "string"
                        },
                        "count": {
                          "type": "integer"
                        }
                      }
                    }
                  },
                  "names": {
                    "type": "integer"
                  }
                }
              },
              "wayback": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "firstCapture",
                  "lastCapture",
                  "sampled",
                  "distinctContent",
                  "statusCodes",
                  "captures"
                ],
                "properties": {
                  "firstCapture": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "lastCapture": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "sampled": {
                    "type": "integer"
                  },
                  "distinctContent": {
                    "type": "integer"
                  },
                  "statusCodes": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "integer"
                    }
                  },
                  "captures": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "timestamp",
                        "status",
                        "digest"
                      ],
                      "properties": {
                        "timestamp": {
                          "type": "string"
                        },
                        "status": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "digest": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "EmailInfrastructureExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "paste"
            ],
            "default": "live"
          },
          "domain": {
            "title": "Domain",
            "type": "string",
            "maxLength": 253
          },
          "records": {
            "title": "DNS records (paste mode)",
            "description": "Zone-file lines: name [ttl] [IN] TYPE value. Use @ for the domain, relative names like _dmarc or selector1._domainkey, and a trailing dot for other domains (e.g. include targets).",
            "type": "string",
            "maxLength": 60000
          },
          "mtaStsPolicy": {
            "title": "MTA-STS policy file (paste mode, optional)",
            "type": "string",
            "maxLength": 10000
          }
        },
        "required": [
          "domain"
        ]
      },
      "EmailInfrastructureExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "domain",
              "mode",
              "score",
              "grade",
              "scoreItems",
              "mx",
              "nullMx",
              "spf",
              "dmarc",
              "dkim",
              "mtaSts",
              "tlsRpt",
              "bimi",
              "findings",
              "fixes"
            ],
            "properties": {
              "domain": {
                "type": "string"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "live",
                  "paste"
                ]
              },
              "score": {
                "type": "integer"
              },
              "grade": {
                "type": "string"
              },
              "scoreItems": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "area",
                    "points",
                    "max",
                    "applicable",
                    "detail"
                  ],
                  "properties": {
                    "area": {
                      "type": "string"
                    },
                    "points": {
                      "type": "number"
                    },
                    "max": {
                      "type": "number"
                    },
                    "applicable": {
                      "type": "boolean"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              },
              "mx": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "priority",
                    "exchange",
                    "addresses"
                  ],
                  "properties": {
                    "priority": {
                      "type": "integer"
                    },
                    "exchange": {
                      "type": "string"
                    },
                    "addresses": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "nullMx": {
                "type": "boolean"
              },
              "spf": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "record",
                  "lookups",
                  "voidLookups",
                  "includes"
                ],
                "properties": {
                  "record": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "lookups": {
                    "type": "integer"
                  },
                  "voidLookups": {
                    "type": "integer"
                  },
                  "includes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "domain",
                        "depth",
                        "record",
                        "lookups"
                      ],
                      "properties": {
                        "domain": {
                          "type": "string"
                        },
                        "depth": {
                          "type": "integer"
                        },
                        "record": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "lookups": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              },
              "dmarc": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "record",
                  "policy"
                ],
                "properties": {
                  "record": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "policy": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "dkim": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "selector",
                    "record",
                    "keyType",
                    "bits",
                    "revoked"
                  ],
                  "properties": {
                    "selector": {
                      "type": "string"
                    },
                    "record": {
                      "type": "string"
                    },
                    "keyType": {
                      "type": "string"
                    },
                    "bits": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "revoked": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "mtaSts": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "record",
                  "policyFetched",
                  "mode",
                  "mx",
                  "maxAge"
                ],
                "properties": {
                  "record": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "policyFetched": {
                    "type": "boolean"
                  },
                  "mode": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "mx": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "maxAge": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                }
              },
              "tlsRpt": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "bimi": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "area",
                    "finding"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low",
                        "info"
                      ]
                    },
                    "area": {
                      "type": "string"
                    },
                    "finding": {
                      "type": "string"
                    }
                  }
                }
              },
              "fixes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "GlobalDnsExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "pasted"
            ],
            "default": "live"
          },
          "domain": {
            "title": "Domain",
            "description": "Live mode: the domain or host name to check.",
            "type": "string",
            "maxLength": 253
          },
          "pasted": {
            "title": "Resolver answers (JSON)",
            "description": "Pasted mode: {domain, zone?, dsPresent?, nameservers:[{name,addresses}], resolvers:[{id,label,kind:\"authoritative\"|\"public-doh\"|\"local\",status,ad?,records:{A:{values,ttl}}}]} — the \"result\" of a live check also works.",
            "type": "string",
            "maxLength": 200000
          },
          "trackChanges": {
            "title": "Remember this check and show changes since the last one",
            "type": "boolean",
            "default": true
          }
        },
        "required": []
      },
      "GlobalDnsExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "domain",
              "zone",
              "mode",
              "nameservers",
              "resolvers",
              "records",
              "soaSerials",
              "propagationInProgress",
              "dnssec",
              "comparison",
              "ttl",
              "findings",
              "history"
            ],
            "properties": {
              "domain": {
                "type": "string"
              },
              "zone": {
                "type": "string"
              },
              "mode": {
                "type": "string",
                "enum": [
                  "live",
                  "pasted"
                ]
              },
              "nameservers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "addresses",
                    "inBailiwick"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "addresses": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "inBailiwick": {
                      "type": "boolean"
                    }
                  }
                }
              },
              "resolvers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "label",
                    "kind",
                    "address",
                    "status",
                    "error",
                    "ad",
                    "records"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "authoritative",
                        "public-doh",
                        "local"
                      ]
                    },
                    "address": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "status": {
                      "type": "string"
                    },
                    "error": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "ad": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "records": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "values",
                          "ttl"
                        ],
                        "properties": {
                          "values": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "ttl": {
                            "type": [
                              "integer",
                              "null"
                            ]
                          }
                        }
                      }
                    }
                  }
                }
              },
              "records": {
                "type": "object",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "soaSerials": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "resolver",
                    "serial"
                  ],
                  "properties": {
                    "resolver": {
                      "type": "string"
                    },
                    "serial": {
                      "type": "integer"
                    }
                  }
                }
              },
              "propagationInProgress": {
                "type": "boolean"
              },
              "dnssec": {
                "type": "string",
                "enum": [
                  "validated",
                  "unsigned",
                  "bogus",
                  "signed-not-validated",
                  "unknown"
                ]
              },
              "comparison": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "type",
                    "resolversAnswering",
                    "variants",
                    "authoritativeConsistent",
                    "differing"
                  ],
                  "properties": {
                    "type": {
                      "type": "string"
                    },
                    "resolversAnswering": {
                      "type": "integer"
                    },
                    "variants": {
                      "type": "integer"
                    },
                    "authoritativeConsistent": {
                      "type": "boolean"
                    },
                    "differing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "ttl": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "type",
                    "authoritative",
                    "google",
                    "cloudflare",
                    "local"
                  ],
                  "properties": {
                    "type": {
                      "type": "string"
                    },
                    "authoritative": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "google": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "cloudflare": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "local": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  }
                }
              },
              "findings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "severity",
                    "area",
                    "finding"
                  ],
                  "properties": {
                    "severity": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low",
                        "info"
                      ]
                    },
                    "area": {
                      "type": "string"
                    },
                    "finding": {
                      "type": "string"
                    }
                  }
                }
              },
              "history": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "tracked",
                  "previousCheck",
                  "changes",
                  "events"
                ],
                "properties": {
                  "tracked": {
                    "type": "boolean"
                  },
                  "previousCheck": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "changes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "type",
                        "added",
                        "removed"
                      ],
                      "properties": {
                        "type": {
                          "type": "string"
                        },
                        "added": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "removed": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "events": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "checkedAt",
                        "changes"
                      ],
                      "properties": {
                        "checkedAt": {
                          "type": "string"
                        },
                        "changes": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "type",
                              "added",
                              "removed"
                            ],
                            "properties": {
                              "type": {
                                "type": "string"
                              },
                              "added": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "removed": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "HttpTechnologyExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "paste"
            ],
            "default": "live"
          },
          "url": {
            "title": "URL (live mode)",
            "type": "string",
            "format": "uri"
          },
          "rawHeaders": {
            "title": "Raw response headers (paste mode)",
            "description": "Output of curl -sIL or the browser's raw response headers. Several blocks are read as a redirect chain.",
            "type": "string",
            "maxLength": 60000
          },
          "html": {
            "title": "HTML source (paste mode, optional)",
            "type": "string",
            "maxLength": 400000
          }
        },
        "required": []
      },
      "HttpTechnologyExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "mode",
              "requestedUrl",
              "finalUrl",
              "status",
              "redirects",
              "httpsUpgrade",
              "protocols",
              "compression",
              "caching",
              "security",
              "technologies",
              "headers"
            ],
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "live",
                  "paste"
                ]
              },
              "requestedUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "finalUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "status": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "redirects": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "status",
                    "location"
                  ],
                  "properties": {
                    "status": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "location": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "httpsUpgrade": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "protocols": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "observed",
                  "http2Advertised",
                  "http3Advertised",
                  "altSvc"
                ],
                "properties": {
                  "observed": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "http2Advertised": {
                    "type": "boolean"
                  },
                  "http3Advertised": {
                    "type": "boolean"
                  },
                  "altSvc": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "compression": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "encoding",
                  "compressed",
                  "contentType"
                ],
                "properties": {
                  "encoding": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "compressed": {
                    "type": "boolean"
                  },
                  "contentType": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "caching": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "verdict",
                  "cacheControl",
                  "maxAge",
                  "sMaxAge",
                  "sharedTtl",
                  "etag",
                  "lastModified",
                  "age",
                  "vary",
                  "expires"
                ],
                "properties": {
                  "verdict": {
                    "type": "string"
                  },
                  "cacheControl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "maxAge": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "sMaxAge": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "sharedTtl": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "etag": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "lastModified": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "age": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "vary": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "expires": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "security": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "header",
                    "present",
                    "value",
                    "severity",
                    "summary"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "header": {
                      "type": "string"
                    },
                    "present": {
                      "type": "boolean"
                    },
                    "value": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "severity": {
                      "type": "string",
                      "enum": [
                        "good",
                        "info",
                        "warning"
                      ]
                    },
                    "summary": {
                      "type": "string"
                    }
                  }
                }
              },
              "technologies": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "category",
                    "confidence",
                    "evidence",
                    "version"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "category": {
                      "type": "string"
                    },
                    "confidence": {
                      "type": "string",
                      "enum": [
                        "high",
                        "medium",
                        "low"
                      ]
                    },
                    "evidence": {
                      "type": "string"
                    },
                    "version": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "headers": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "InternetOutageAtlasInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "paste"
            ],
            "default": "live"
          },
          "target": {
            "title": "Country code, ASN or domain",
            "type": "string",
            "maxLength": 253
          },
          "targetType": {
            "title": "Target type",
            "type": "string",
            "enum": [
              "auto",
              "country",
              "asn",
              "domain"
            ],
            "default": "auto"
          },
          "windowHours": {
            "title": "Look-back window",
            "type": "integer",
            "minimum": 1,
            "maximum": 720,
            "default": 48,
            "x-unit": "hours"
          },
          "pastedJson": {
            "title": "IODA alerts/events JSON (paste mode)",
            "description": "Response of /v2/outages/alerts or /v2/outages/events (or {\"alerts\":…, \"events\":…}).",
            "type": "string",
            "maxLength": 500000
          }
        },
        "required": [
          "target"
        ]
      },
      "InternetOutageAtlasResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "target",
              "targetType",
              "mode",
              "window",
              "entityName",
              "asn",
              "alertCount",
              "episodes",
              "events",
              "routing",
              "probe",
              "incidents",
              "status"
            ],
            "properties": {
              "target": {
                "type": "string"
              },
              "targetType": {
                "type": "string",
                "enum": [
                  "country",
                  "asn",
                  "domain"
                ]
              },
              "mode": {
                "type": "string",
                "enum": [
                  "live",
                  "paste"
                ]
              },
              "window": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "from",
                  "until"
                ],
                "properties": {
                  "from": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "until": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "entityName": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "asn": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "alertCount": {
                "type": "integer"
              },
              "episodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "datasource",
                    "start",
                    "end",
                    "worstLevel",
                    "minRatio"
                  ],
                  "properties": {
                    "datasource": {
                      "type": "string"
                    },
                    "start": {
                      "type": "string"
                    },
                    "end": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "worstLevel": {
                      "type": "string"
                    },
                    "minRatio": {
                      "type": [
                        "number",
                        "null"
                      ]
                    }
                  }
                }
              },
              "events": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "datasource",
                    "start",
                    "durationSeconds",
                    "score"
                  ],
                  "properties": {
                    "datasource": {
                      "type": "string"
                    },
                    "start": {
                      "type": "string"
                    },
                    "durationSeconds": {
                      "type": "integer"
                    },
                    "score": {
                      "type": [
                        "number",
                        "null"
                      ]
                    }
                  }
                }
              },
              "routing": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "visibilityV4",
                  "visibilityV6",
                  "prefixesV4",
                  "prefixesV6",
                  "bgpSpikes"
                ],
                "properties": {
                  "visibilityV4": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "visibilityV6": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "prefixesV4": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "prefixesV6": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "bgpSpikes": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "time",
                        "total",
                        "withdrawals"
                      ],
                      "properties": {
                        "time": {
                          "type": "string"
                        },
                        "total": {
                          "type": "integer"
                        },
                        "withdrawals": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              },
              "probe": {
                "type": [
                  "object",
                  "null"
                ],
                "additionalProperties": false,
                "required": [
                  "url",
                  "reachable",
                  "status",
                  "error"
                ],
                "properties": {
                  "url": {
                    "type": "string"
                  },
                  "reachable": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "error": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "incidents": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "start",
                    "end",
                    "signals",
                    "confidence",
                    "detail"
                  ],
                  "properties": {
                    "start": {
                      "type": "string"
                    },
                    "end": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "signals": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "confidence": {
                      "type": "string",
                      "enum": [
                        "corroborated",
                        "single-signal"
                      ]
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              },
              "status": {
                "type": "string",
                "enum": [
                  "disruption-ongoing",
                  "recent-disruption",
                  "no-disruption-signals",
                  "insufficient-data"
                ]
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "Ipv6ReadinessExplorerInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "enum": [
              "live",
              "pasted"
            ],
            "default": "live"
          },
          "domain": {
            "title": "Domain",
            "type": "string",
            "maxLength": 253
          },
          "connectTest": {
            "title": "Also try a TCP connection to port 443 over IPv6 from this server",
            "type": "boolean",
            "default": true
          },
          "pasted": {
            "title": "Record set (JSON)",
            "description": "Pasted mode: {domain, hosts:[{name, ipv4, ipv6}], nameservers:[…], mx:[{name, priority, ipv4, ipv6}], connect?:[{host, address, ok, code}]}",
            "type": "string",
            "maxLength": 100000
          }
        },
        "required": []
      },
      "Ipv6ReadinessExplorerResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "domain",
              "score",
              "grade",
              "points",
              "maxPoints",
              "checks",
              "hosts",
              "nameservers",
              "mx",
              "addresses",
              "connect",
              "serverHasNoIpv6"
            ],
            "properties": {
              "domain": {
                "type": "string"
              },
              "score": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100
              },
              "grade": {
                "type": "string",
                "enum": [
                  "A",
                  "B",
                  "C",
                  "D",
                  "F"
                ]
              },
              "points": {
                "type": "integer"
              },
              "maxPoints": {
                "type": "integer"
              },
              "checks": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id",
                    "label",
                    "status",
                    "points",
                    "max",
                    "detail"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "pass",
                        "fail",
                        "partial",
                        "n/a"
                      ]
                    },
                    "points": {
                      "type": "integer"
                    },
                    "max": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              },
              "hosts": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "ipv4",
                    "ipv6"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "ipv4": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "ipv6": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "nameservers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "ipv4",
                    "ipv6"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "ipv4": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "ipv6": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "mx": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "name",
                    "ipv4",
                    "ipv6",
                    "priority"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "ipv4": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "ipv6": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "priority": {
                      "type": "integer"
                    }
                  }
                }
              },
              "addresses": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "host",
                    "role",
                    "address",
                    "global",
                    "kind"
                  ],
                  "properties": {
                    "host": {
                      "type": "string"
                    },
                    "role": {
                      "type": "string"
                    },
                    "address": {
                      "type": "string"
                    },
                    "global": {
                      "type": "boolean"
                    },
                    "kind": {
                      "type": "string"
                    }
                  }
                }
              },
              "connect": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "host",
                    "address",
                    "ok",
                    "code",
                    "ms"
                  ],
                  "properties": {
                    "host": {
                      "type": "string"
                    },
                    "address": {
                      "type": "string"
                    },
                    "ok": {
                      "type": "boolean"
                    },
                    "code": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "ms": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  }
                }
              },
              "serverHasNoIpv6": {
                "type": "boolean"
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}