{
  "schema": "kallipolis.resource-html-directory.v1",
  "version": "1.0.0",
  "canonicalBaseUrl": "https://platoskallipolis.com",
  "generatedFrom": "apps/web/public/resources",
  "resourceCount": 350,
  "categories": [
    {
      "id": "agent-interoperability",
      "resourceCount": 4
    },
    {
      "id": "ai-discovery-and-registry",
      "resourceCount": 4
    },
    {
      "id": "ai-safety-provenance-and-audit",
      "resourceCount": 4
    },
    {
      "id": "data-knowledge-infrastructure",
      "resourceCount": 39
    },
    {
      "id": "enterprise-application-connectors",
      "resourceCount": 12
    },
    {
      "id": "platform-integration",
      "resourceCount": 37
    },
    {
      "id": "public-data-apis",
      "resourceCount": 250
    }
  ],
  "items": [
    {
      "id": "resource.interop.a2a-1.0",
      "title": "Agent2Agent protocol 1.0 interoperability profile",
      "summary": "Machine-readable implementation facts for discovering A2A agents, negotiating protocol versions, and exchanging messages across independent Agent systems.",
      "category": "agent-interoperability",
      "resourceCategory": "agent-interoperability",
      "slug": "a2a-1.0",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:00:00Z",
      "contentHash": "sha256:ecdf0f489a58f4ef9408aed97d245cbc1cfa82ff7d282074c544a4c171f9a5cb",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:00:00Z"
      },
      "jsonPath": "/resources/agent-interoperability/a2a-1.0.json",
      "htmlPath": "/resources/view/agent-interoperability/a2a-1.0",
      "facts": [
        {
          "id": "fact.a2a.purpose",
          "statement": "A2A 1.0 is an open standard for communication and interoperability between independent Agent systems built with different frameworks, languages, or vendors.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.a2a.specification"
          ]
        },
        {
          "id": "fact.a2a.discovery",
          "statement": "An A2A server exposes an Agent Card describing identity, capabilities, skills, supported protocols, and interaction requirements; the standardized public discovery path is /.well-known/agent-card.json.",
          "normativeLevel": "normative",
          "sourceIds": [
            "source.a2a.specification"
          ]
        },
        {
          "id": "fact.a2a.version-header",
          "statement": "A client using A2A 1.0 sends the A2A-Version header with each request using the Major.Minor protocol version so the server can apply the requested semantics.",
          "normativeLevel": "normative",
          "sourceIds": [
            "source.a2a.specification"
          ]
        },
        {
          "id": "fact.a2a.bindings",
          "statement": "A2A separates its canonical data model and abstract operations from protocol bindings such as HTTP+JSON, JSON-RPC, and gRPC so shared semantics can remain interoperable across transports.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.a2a.specification"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.a2a.specification",
          "url": "https://a2a-protocol.org/latest/specification",
          "title": "Agent2Agent Protocol Specification",
          "publisher": "A2A Protocol Project",
          "observedAt": "2026-08-26T15:00:00Z"
        }
      ]
    },
    {
      "id": "resource.interop.json-rpc-2.0",
      "title": "JSON-RPC 2.0 interoperability profile",
      "summary": "Machine-readable implementation facts for JSON-RPC requests, notifications, response correlation, and transport-independent remote procedure calls.",
      "category": "agent-interoperability",
      "resourceCategory": "agent-interoperability",
      "slug": "json-rpc-2.0",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:00:00Z",
      "contentHash": "sha256:b54212db7cbb40a47f843332a9f2bfb1d37e8dbdff1a315964d1ac20b6430981",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:00:00Z"
      },
      "jsonPath": "/resources/agent-interoperability/json-rpc-2.0.json",
      "htmlPath": "/resources/view/agent-interoperability/json-rpc-2.0",
      "facts": [
        {
          "id": "fact.json-rpc.transport",
          "statement": "JSON-RPC 2.0 is a stateless, lightweight, transport-agnostic remote procedure call protocol that uses JSON data structures.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.json-rpc.specification"
          ]
        },
        {
          "id": "fact.json-rpc.request",
          "statement": "A JSON-RPC 2.0 Request sets jsonrpc to exactly 2.0, names the method, may include structured params, and uses an id to correlate the response when a response is expected.",
          "normativeLevel": "normative",
          "sourceIds": [
            "source.json-rpc.specification"
          ]
        },
        {
          "id": "fact.json-rpc.notification",
          "statement": "A JSON-RPC Notification omits the id member, and the server must not send a response to it.",
          "normativeLevel": "normative",
          "sourceIds": [
            "source.json-rpc.specification"
          ]
        },
        {
          "id": "fact.json-rpc.response",
          "statement": "A JSON-RPC Response includes the matching request id and exactly one of result or error.",
          "normativeLevel": "normative",
          "sourceIds": [
            "source.json-rpc.specification"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.json-rpc.specification",
          "url": "https://www.jsonrpc.org/specification",
          "title": "JSON-RPC 2.0 Specification",
          "publisher": "JSON-RPC Working Group",
          "observedAt": "2026-08-26T15:00:00Z"
        }
      ]
    },
    {
      "id": "resource.interop.mcp-2026-07-28",
      "title": "Model Context Protocol 2026-07-28 interoperability profile",
      "summary": "Machine-readable implementation facts for the current stateless MCP core, JSON-RPC messages, standard transports, and JSON Schema validation requirements.",
      "category": "agent-interoperability",
      "resourceCategory": "agent-interoperability",
      "slug": "mcp-2026-07-28",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:00:00Z",
      "contentHash": "sha256:c71ba1f894f29fd8b78d4bdaeff80e0c7c24b073bf71d0d1929a5f06e826e98a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:00:00Z"
      },
      "jsonPath": "/resources/agent-interoperability/mcp-2026-07-28.json",
      "htmlPath": "/resources/view/agent-interoperability/mcp-2026-07-28",
      "facts": [
        {
          "id": "fact.mcp.revision",
          "statement": "The current referenced Model Context Protocol revision is 2026-07-28.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mcp.overview"
          ]
        },
        {
          "id": "fact.mcp.json-rpc",
          "statement": "All messages between MCP clients and servers must follow JSON-RPC 2.0.",
          "normativeLevel": "normative",
          "sourceIds": [
            "source.mcp.overview"
          ]
        },
        {
          "id": "fact.mcp.stateless",
          "statement": "The 2026-07-28 MCP core is stateless: every request carries the information needed for independent processing, and a server must not infer context from prior requests on the same connection.",
          "normativeLevel": "normative",
          "sourceIds": [
            "source.mcp.overview"
          ]
        },
        {
          "id": "fact.mcp.transports",
          "statement": "The standard MCP bindings are stdio and Streamable HTTP; Streamable HTTP sends each message by HTTP POST to one MCP endpoint and returns JSON or a request-scoped SSE stream.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mcp.transports"
          ]
        },
        {
          "id": "fact.mcp.schema-dialect",
          "statement": "MCP clients and servers must support JSON Schema 2020-12 for schemas without an explicit $schema field and validate schemas using the declared or default dialect.",
          "normativeLevel": "normative",
          "sourceIds": [
            "source.mcp.overview"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.mcp.overview",
          "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/index",
          "title": "Model Context Protocol 2026-07-28 Overview",
          "publisher": "Model Context Protocol Project",
          "observedAt": "2026-08-26T15:00:00Z"
        },
        {
          "id": "source.mcp.transports",
          "url": "https://modelcontextprotocol.io/specification/2026-07-28/basic/transports",
          "title": "Model Context Protocol 2026-07-28 Transports",
          "publisher": "Model Context Protocol Project",
          "observedAt": "2026-08-26T15:00:00Z"
        }
      ]
    },
    {
      "id": "resource.interop.openapi-3.2.0",
      "title": "OpenAPI Specification 3.2.0 interoperability profile",
      "summary": "Machine-readable implementation facts for describing HTTP APIs so Agent clients and conventional tooling can discover and understand service capabilities.",
      "category": "agent-interoperability",
      "resourceCategory": "agent-interoperability",
      "slug": "openapi-3.2.0",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:00:00Z",
      "contentHash": "sha256:6e9990393156c82f6e714a4890c9554e3e0812887a17369313de18f1dd9d7061",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:00:00Z"
      },
      "jsonPath": "/resources/agent-interoperability/openapi-3.2.0.json",
      "htmlPath": "/resources/view/agent-interoperability/openapi-3.2.0",
      "facts": [
        {
          "id": "fact.openapi.version",
          "statement": "OpenAPI Specification 3.2.0 was published on 19 September 2025 and is the latest published version referenced by the official specification page at observation time.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openapi.specification"
          ]
        },
        {
          "id": "fact.openapi.purpose",
          "statement": "OpenAPI defines a standard, programming-language-agnostic interface description for HTTP APIs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openapi.specification"
          ]
        },
        {
          "id": "fact.openapi.discovery",
          "statement": "A properly defined OpenAPI description lets humans and computers discover and understand a service without source-code access, separate documentation, or network-traffic inspection.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openapi.specification"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.openapi.specification",
          "url": "https://spec.openapis.org/oas/v3.2.0.html",
          "title": "OpenAPI Specification v3.2.0",
          "publisher": "OpenAPI Initiative",
          "observedAt": "2026-08-26T15:00:00Z"
        }
      ]
    },
    {
      "id": "resource.discovery.a2a-registry-lifecycle",
      "title": "A2A Registry submission and verification lifecycle",
      "summary": "Publisher-source distinctions among agent URL submission, manifest scanning, directory listing, domain verification, DNS discovery, connection, transaction, citation, and measurable use.",
      "category": "ai-discovery-and-registry",
      "resourceCategory": "ai-discovery-and-registry",
      "slug": "a2a-registry-lifecycle",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:20:00Z",
      "contentHash": "sha256:239c4154490d3c79e831bc17b40655b37504071e9c4410b19b609b5934069147",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:20:00Z"
      },
      "jsonPath": "/resources/ai-discovery-and-registry/a2a-registry-lifecycle.json",
      "htmlPath": "/resources/view/ai-discovery-and-registry/a2a-registry-lifecycle",
      "facts": [
        {
          "id": "fact.a2a-registry.submit-scan",
          "statement": "The A2A Registry submission flow accepts a website, ANS, or GitHub URL and scans supported A2A, MCP, OpenAI Plugin, GoDaddy ANS, or agent-card.json metadata to discover agent details.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.a2a-registry.submit"
          ]
        },
        {
          "id": "fact.a2a-registry.verification",
          "statement": "The Registry describes domain verification as its authenticity mechanism and separately describes discovery through DNS resolution and the registry; verification and discoverability are therefore distinct evidence states.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.a2a-registry.about"
          ]
        },
        {
          "id": "fact.a2a-registry.lifecycle",
          "statement": "Registration, directory listing, domain verification, agent connection, and transaction are separate lifecycle events in the Registry's own product flow and should not be counted as interchangeable outcomes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.a2a-registry.about",
            "source.a2a-registry.resources"
          ]
        },
        {
          "id": "fact.a2a-registry.use-evidence",
          "statement": "A successful scan or listing proves metadata discovery only; citations, successful protocol calls, repeat consumers, and completed transactions require separate event or log evidence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.a2a-registry.submit",
            "source.a2a-registry.about"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.a2a-registry.submit",
          "url": "https://www.a2a-registry.org/submit",
          "title": "Submit an Agent",
          "publisher": "A2A Registry",
          "observedAt": "2026-08-26T15:20:00Z"
        },
        {
          "id": "source.a2a-registry.about",
          "url": "https://www.a2a-registry.org/about",
          "title": "About A2A Registry",
          "publisher": "A2A Registry",
          "observedAt": "2026-08-26T15:20:00Z"
        },
        {
          "id": "source.a2a-registry.resources",
          "url": "https://www.a2a-registry.org/resources",
          "title": "A2A Registry Resources and Documentation",
          "publisher": "A2A Registry",
          "observedAt": "2026-08-26T15:20:00Z"
        }
      ]
    },
    {
      "id": "resource.discovery.google-search-discovery-indexing",
      "title": "Google Search discovery and indexing lifecycle",
      "summary": "Official-source distinctions among robots access, sitemap submission, crawling, indexing, canonical selection, and serving a result so machine consumers do not report one stage as proof of another.",
      "category": "ai-discovery-and-registry",
      "resourceCategory": "ai-discovery-and-registry",
      "slug": "google-search-discovery-indexing",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:20:00Z",
      "contentHash": "sha256:604f206d94b766759bca4729e60e490b89ab4a7c9e6979864c60f0e0b02516d9",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:20:00Z"
      },
      "jsonPath": "/resources/ai-discovery-and-registry/google-search-discovery-indexing.json",
      "htmlPath": "/resources/view/ai-discovery-and-registry/google-search-discovery-indexing",
      "facts": [
        {
          "id": "fact.google.robots-access",
          "statement": "A robots.txt file controls which URLs a crawler may access; it does not by itself prove that a URL was crawled, indexed, ranked, or shown in search results.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.robots",
            "source.google.essentials"
          ]
        },
        {
          "id": "fact.google.sitemap-suggestion",
          "statement": "A sitemap helps Google discover new and updated URLs, but Google documents sitemaps as suggestions rather than guarantees that every submitted URL will be crawled or crawled immediately.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.crawl-errors"
          ]
        },
        {
          "id": "fact.google.eligibility-not-indexing",
          "statement": "Meeting Google Search technical requirements and best practices does not guarantee that Google will crawl, index, or serve the content.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.essentials"
          ]
        },
        {
          "id": "fact.google.crawl-not-serving",
          "statement": "A page may be crawled yet still not appear in search results when Google determines that the page lacks sufficient value or user demand; serving must therefore be measured separately from crawl evidence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.crawl-errors"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.google.robots",
          "url": "https://developers.google.com/crawling/docs/robots-txt/create-robots-txt",
          "title": "How to write and submit a robots.txt file",
          "publisher": "Google",
          "observedAt": "2026-08-26T15:20:00Z"
        },
        {
          "id": "source.google.essentials",
          "url": "https://developers.google.com/search/docs/essentials",
          "title": "Google Search Essentials",
          "publisher": "Google",
          "observedAt": "2026-08-26T15:20:00Z"
        },
        {
          "id": "source.google.crawl-errors",
          "url": "https://developers.google.com/search/docs/crawling-indexing/troubleshoot-crawling-errors",
          "title": "Troubleshoot Google Search crawling errors",
          "publisher": "Google",
          "observedAt": "2026-08-26T15:20:00Z"
        }
      ]
    },
    {
      "id": "resource.discovery.mcp-registry-lifecycle",
      "title": "Official MCP Registry publication and discovery lifecycle",
      "summary": "Official-source facts separating package publication, metadata validation, namespace authentication, registry listing, downstream aggregation, installation, security assessment, and actual MCP use.",
      "category": "ai-discovery-and-registry",
      "resourceCategory": "ai-discovery-and-registry",
      "slug": "mcp-registry-lifecycle",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:20:00Z",
      "contentHash": "sha256:f45bb909ea7d8c9e777e458f4edaa04feb2abeb638dd6ae9a156deb3b1bc5cea",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:20:00Z"
      },
      "jsonPath": "/resources/ai-discovery-and-registry/mcp-registry-lifecycle.json",
      "htmlPath": "/resources/view/ai-discovery-and-registry/mcp-registry-lifecycle",
      "facts": [
        {
          "id": "fact.mcp.registry-metadata-only",
          "statement": "The official MCP Registry hosts standardized server metadata and points to public packages or remote servers; it does not host the implementation artifacts themselves.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mcp.registry-about",
            "source.mcp.registry-quickstart"
          ]
        },
        {
          "id": "fact.mcp.publish-validate-list",
          "statement": "Publishing uses a server.json record and the mcp-publisher workflow; package metadata is validated before publication, and a successful listing can be checked independently through the Registry API.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mcp.registry-quickstart"
          ]
        },
        {
          "id": "fact.mcp.namespace-not-security",
          "statement": "Namespace authentication ties a server name to a GitHub identity or domain, while the official Registry relies on the wider ecosystem for security scanning of server code; namespace verification is not a security audit.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mcp.registry-about"
          ]
        },
        {
          "id": "fact.mcp.listing-not-use",
          "statement": "The Registry is a primary metadata source for downstream aggregators, and host applications commonly consume downstream registries; publication or aggregation is not evidence of installation, successful initialization, tool calls, or repeat use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mcp.registry-about",
            "source.mcp.registry-aggregators"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.mcp.registry-about",
          "url": "https://modelcontextprotocol.io/registry/about",
          "title": "The MCP Registry",
          "publisher": "Model Context Protocol Project",
          "observedAt": "2026-08-26T15:20:00Z"
        },
        {
          "id": "source.mcp.registry-quickstart",
          "url": "https://modelcontextprotocol.io/registry/quickstart",
          "title": "Quickstart: Publish an MCP Server to the MCP Registry",
          "publisher": "Model Context Protocol Project",
          "observedAt": "2026-08-26T15:20:00Z"
        },
        {
          "id": "source.mcp.registry-aggregators",
          "url": "https://modelcontextprotocol.io/registry/registry-aggregators",
          "title": "MCP Registry Aggregators",
          "publisher": "Model Context Protocol Project",
          "observedAt": "2026-08-26T15:20:00Z"
        }
      ]
    },
    {
      "id": "resource.discovery.openai-search-crawler-controls",
      "title": "OpenAI search crawler access and discovery controls",
      "summary": "Official-source lifecycle facts for controlling OpenAI search crawling without confusing crawler access, ChatGPT search eligibility, navigational links, training use, citation, or user-triggered retrieval.",
      "category": "ai-discovery-and-registry",
      "resourceCategory": "ai-discovery-and-registry",
      "slug": "openai-search-crawler-controls",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:20:00Z",
      "contentHash": "sha256:5d45949de922576f9f8742488b1fb2550fee32ba31ff1dde3373ecf5251efdd3",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:20:00Z"
      },
      "jsonPath": "/resources/ai-discovery-and-registry/openai-search-crawler-controls.json",
      "htmlPath": "/resources/view/ai-discovery-and-registry/openai-search-crawler-controls",
      "facts": [
        {
          "id": "fact.openai.controls-independent",
          "statement": "OAI-SearchBot and GPTBot robots.txt controls are independent: a publisher can allow the search crawler while disallowing the training crawler.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.crawlers"
          ]
        },
        {
          "id": "fact.openai.searchbot-purpose",
          "statement": "OAI-SearchBot is the automatic crawler used to surface websites in ChatGPT search results; publishers should allow it in robots.txt and permit OpenAI's published search-bot IP ranges when they want search eligibility.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.crawlers"
          ]
        },
        {
          "id": "fact.openai.access-not-listing-proof",
          "statement": "Allowing OAI-SearchBot is an access and eligibility signal, not evidence that a URL has been indexed, cited in an answer, or used by a person or Agent; those outcomes require separate observations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.crawlers"
          ]
        },
        {
          "id": "fact.openai.user-agent-separation",
          "statement": "ChatGPT-User represents certain user-triggered page visits, is not an automatic web crawler, and is not the control used to determine whether content may appear in ChatGPT search.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.crawlers"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.openai.crawlers",
          "url": "https://developers.openai.com/api/docs/bots",
          "title": "Overview of OpenAI Crawlers",
          "publisher": "OpenAI",
          "observedAt": "2026-08-26T15:20:00Z"
        }
      ]
    },
    {
      "id": "resource.provenance.c2pa-content-credentials-evidence",
      "title": "C2PA Content Credentials evidence boundaries",
      "summary": "C2PA 2.4 provenance facts that distinguish cryptographic integrity and signer trust from factual truth, completeness, identity, and the absence of credentials.",
      "category": "ai-safety-provenance-and-audit",
      "resourceCategory": "ai-safety-provenance-and-audit",
      "slug": "c2pa-content-credentials-evidence",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:38:00Z",
      "contentHash": "sha256:b1ce67840fb56045784c0a82bf0e8c6b79c163c129fb777ef92b8385f9b617f4",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:38:00Z"
      },
      "jsonPath": "/resources/ai-safety-provenance-and-audit/c2pa-content-credentials-evidence.json",
      "htmlPath": "/resources/view/ai-safety-provenance-and-audit/c2pa-content-credentials-evidence",
      "facts": [
        {
          "id": "fact.c2pa.manifest",
          "statement": "A C2PA Content Credential is a cryptographically bound manifest containing signed assertions about an asset's origin, modifications, and other provenance information.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.c2pa.explainer-2.4"
          ]
        },
        {
          "id": "fact.c2pa.validation-boundary",
          "statement": "C2PA validation can establish that provenance is associated with the asset, well formed, signer-linked under a trust model, and free from tampering; it does not establish that the content or every assertion is true, accurate, or factual.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.c2pa.explainer-2.4"
          ]
        },
        {
          "id": "fact.c2pa.completeness",
          "statement": "C2PA provenance can be incomplete and metadata can be removed, so a verifier should record which manifest and bindings were checked instead of assuming a complete asset history.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.c2pa.explainer-2.4"
          ]
        },
        {
          "id": "fact.c2pa.absence-and-identity",
          "statement": "The absence of Content Credentials is not proof that media is untrustworthy, and the core specification focuses on content provenance rather than directly establishing a human or organizational identity.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.c2pa.explainer-2.4"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.c2pa.explainer-2.4",
          "url": "https://spec.c2pa.org/specifications/specifications/2.4/explainer/Explainer.html",
          "title": "C2PA and Content Credentials Explainer 2.4",
          "publisher": "Coalition for Content Provenance and Authenticity",
          "observedAt": "2026-08-26T15:38:00Z"
        }
      ]
    },
    {
      "id": "resource.safety.nist-ai-rmf-evidence-profile",
      "title": "NIST AI RMF evidence and continuous-risk profile",
      "summary": "Official NIST facts for using AI RMF 1.0 as a voluntary, iterative risk-management structure while requiring real implementation and outcome evidence instead of claiming that framework adoption proves safety.",
      "category": "ai-safety-provenance-and-audit",
      "resourceCategory": "ai-safety-provenance-and-audit",
      "slug": "nist-ai-rmf-evidence-profile",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:38:00Z",
      "contentHash": "sha256:26520f4eb3b6193351e446f8190bcc84047f372f7587d696c33a5d8c35b227ec",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:38:00Z"
      },
      "jsonPath": "/resources/ai-safety-provenance-and-audit/nist-ai-rmf-evidence-profile.json",
      "htmlPath": "/resources/view/ai-safety-provenance-and-audit/nist-ai-rmf-evidence-profile",
      "facts": [
        {
          "id": "fact.nist-rmf.scope",
          "statement": "NIST AI RMF 1.0 is voluntary, rights-preserving, non-sector-specific, and use-case agnostic; organizations tailor it to their context rather than treating it as a universal certification.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nist.ai-rmf-publication"
          ]
        },
        {
          "id": "fact.nist-rmf.core",
          "statement": "The AI RMF Core organizes risk work into Govern, Map, Measure, and Manage; its actions are neither a checklist nor necessarily an ordered sequence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nist.ai-rmf-core"
          ]
        },
        {
          "id": "fact.nist-rmf.continuous",
          "statement": "NIST describes AI risk management as continuous, timely, iterative, and applied across the AI lifecycle as context, capabilities, risks, impacts, and expectations evolve.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nist.ai-rmf-core"
          ]
        },
        {
          "id": "fact.nist-rmf.effectiveness-evidence",
          "statement": "Framework users should periodically evaluate whether their policies, practices, implementations, indicators, measurements, and outcomes actually improved risk management; adoption alone is not outcome evidence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nist.ai-rmf-effectiveness"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nist.ai-rmf-publication",
          "url": "https://www.nist.gov/publications/artificial-intelligence-risk-management-framework-ai-rmf-10",
          "title": "Artificial Intelligence Risk Management Framework AI RMF 1.0",
          "publisher": "National Institute of Standards and Technology",
          "observedAt": "2026-08-26T15:38:00Z"
        },
        {
          "id": "source.nist.ai-rmf-core",
          "url": "https://airc.nist.gov/airmf-resources/airmf/5-sec-core/",
          "title": "NIST AI RMF Core",
          "publisher": "National Institute of Standards and Technology",
          "observedAt": "2026-08-26T15:38:00Z"
        },
        {
          "id": "source.nist.ai-rmf-effectiveness",
          "url": "https://airc.nist.gov/airmf-resources/airmf/4-effectiveness/",
          "title": "Effectiveness of the AI RMF",
          "publisher": "National Institute of Standards and Technology",
          "observedAt": "2026-08-26T15:38:00Z"
        }
      ]
    },
    {
      "id": "resource.safety.owasp-agentic-security-evidence",
      "title": "OWASP agentic AI security evidence checklist",
      "summary": "Publisher-source guidance for turning OWASP agentic risk references into system-specific threat models, least-privilege controls, approval gates, adversarial tests, and monitored evidence rather than a security badge.",
      "category": "ai-safety-provenance-and-audit",
      "resourceCategory": "ai-safety-provenance-and-audit",
      "slug": "owasp-agentic-security-evidence",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:38:00Z",
      "contentHash": "sha256:f59520d39c8a6fcf5251406cf6b5f51890c9b2ab7446b6fa8d62fc3063f1c565",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:38:00Z"
      },
      "jsonPath": "/resources/ai-safety-provenance-and-audit/owasp-agentic-security-evidence.json",
      "htmlPath": "/resources/view/ai-safety-provenance-and-audit/owasp-agentic-security-evidence",
      "facts": [
        {
          "id": "fact.owasp.starting-point",
          "statement": "OWASP describes its Top 10 for Agentic Applications 2026 as a starting point for reducing agentic risk; using the list is not itself a certification or proof that an Agent is secure.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.owasp.agentic-top10-2026"
          ]
        },
        {
          "id": "fact.owasp.attack-surfaces",
          "statement": "Agentic threat modelling should cover reasoning, memory, tools, identity, human oversight, and multi-Agent interactions rather than testing only the language model endpoint.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.owasp.agentic-navigator"
          ]
        },
        {
          "id": "fact.owasp.prompt-injection-controls",
          "statement": "OWASP states that prompt injection can be direct or indirect and has no known fool-proof prevention; mitigations include output validation, least privilege, human approval for high-risk actions, segregation of external content, and adversarial testing.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.owasp.prompt-injection-2025"
          ]
        },
        {
          "id": "fact.owasp.evidence-not-badge",
          "statement": "An Agent security claim should identify the relevant threat, implemented control, test case, result, scope, and observation time; a checklist reference without system-specific evidence does not demonstrate control effectiveness.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.owasp.agentic-guide",
            "source.owasp.agentic-top10-2026"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.owasp.agentic-top10-2026",
          "url": "https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026/",
          "title": "OWASP Top 10 for Agentic Applications 2026",
          "publisher": "OWASP GenAI Security Project",
          "observedAt": "2026-08-26T15:38:00Z"
        },
        {
          "id": "source.owasp.agentic-navigator",
          "url": "https://genai.owasp.org/resource/owasp-gen-ai-security-project-agentic-threats-navigator/",
          "title": "OWASP Agentic Threats Navigator",
          "publisher": "OWASP GenAI Security Project",
          "observedAt": "2026-08-26T15:38:00Z"
        },
        {
          "id": "source.owasp.prompt-injection-2025",
          "url": "https://genai.owasp.org/llmrisk/llm01-prompt-injection/",
          "title": "OWASP LLM01 2025 Prompt Injection",
          "publisher": "OWASP GenAI Security Project",
          "observedAt": "2026-08-26T15:38:00Z"
        },
        {
          "id": "source.owasp.agentic-guide",
          "url": "https://genai.owasp.org/resource/securing-agentic-applications-guide-1-0/",
          "title": "OWASP Securing Agentic Applications Guide 1.0",
          "publisher": "OWASP GenAI Security Project",
          "observedAt": "2026-08-26T15:38:00Z"
        }
      ]
    },
    {
      "id": "resource.provenance.slsa-1.2-verification-profile",
      "title": "SLSA 1.2 provenance verification profile",
      "summary": "Official SLSA 1.2 facts for recording exact supply-chain track, level, attestation, trusted builder, expectations, and verification evidence without turning provenance into an unsupported all-purpose security claim.",
      "category": "ai-safety-provenance-and-audit",
      "resourceCategory": "ai-safety-provenance-and-audit",
      "slug": "slsa-1.2-verification-profile",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-26T15:38:00Z",
      "contentHash": "sha256:7f3248281b1eb81906f84d6924111d543de8f37e3b938989d1ea2acb870586a4",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-02T15:38:00Z"
      },
      "jsonPath": "/resources/ai-safety-provenance-and-audit/slsa-1.2-verification-profile.json",
      "htmlPath": "/resources/view/ai-safety-provenance-and-audit/slsa-1.2-verification-profile",
      "facts": [
        {
          "id": "fact.slsa.levels",
          "statement": "SLSA 1.2 defines tracks and levels with increasing supply-chain security guarantees; an evidence record should name the exact track and level rather than claiming generic SLSA compliance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.slsa.spec-1.2"
          ]
        },
        {
          "id": "fact.slsa.build-level-differences",
          "statement": "SLSA Build L1 provides build provenance but is trivial to forge, Build L2 adds signed provenance from a hosted platform, and Build L3 adds a hardened build platform.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.slsa.build-basics"
          ]
        },
        {
          "id": "fact.slsa.verification-required",
          "statement": "Provenance has no protective effect unless it is verified; verification checks the trusted builder identity, envelope signature, artifact relationship, build type, external parameters, and policy expectations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.slsa.verifying-artifacts"
          ]
        },
        {
          "id": "fact.slsa.scope-boundary",
          "statement": "A SLSA result is evidence about specified source and build supply-chain properties. It should not be reported as proof that an artifact has no vulnerabilities or that a deployed system is secure in every context.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.slsa.spec-1.2",
            "source.slsa.verifying-artifacts"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.slsa.spec-1.2",
          "url": "https://slsa.dev/spec/v1.2/",
          "title": "SLSA specification version 1.2",
          "publisher": "SLSA Project",
          "observedAt": "2026-08-26T15:38:00Z"
        },
        {
          "id": "source.slsa.build-basics",
          "url": "https://slsa.dev/spec/v1.2/build-track-basics",
          "title": "SLSA Build Track Basics",
          "publisher": "SLSA Project",
          "observedAt": "2026-08-26T15:38:00Z"
        },
        {
          "id": "source.slsa.verifying-artifacts",
          "url": "https://slsa.dev/spec/v1.2/verifying-artifacts",
          "title": "SLSA Build Verifying Artifacts",
          "publisher": "SLSA Project",
          "observedAt": "2026-08-26T15:38:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.airbyte-open-source",
      "title": "Airbyte Open Source data-movement boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Airbyte Open Source data-movement.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "airbyte-open-source",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:501d73316cf85a86198298e1d4533b4ec44ed7a88c94706135d39f432067801e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/airbyte-open-source.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/airbyte-open-source",
      "facts": [
        {
          "id": "fact.airbyte.open-source.role",
          "statement": "Airbyte Open Source configures sources, destinations, connectors, catalogs, connections, and sync jobs for data movement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.airbyte.open-source"
          ]
        },
        {
          "id": "fact.airbyte.open-source.read",
          "statement": "Connection discovery and configuration are distinct from sync execution that reads a source and writes a destination.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.airbyte.open-source"
          ]
        },
        {
          "id": "fact.airbyte.open-source.write",
          "statement": "Connector credentials, namespaces, selected streams, cursor and primary keys, destination permissions, network access, schedules, and secrets bound operation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.airbyte.open-source"
          ]
        },
        {
          "id": "fact.airbyte.open-source.boundary",
          "statement": "A configured connection does not prove a sync ran, records are complete, schemas are compatible, delivery is exactly once, or a deployment is secure.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.airbyte.open-source"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.airbyte.open-source",
          "url": "https://docs.airbyte.com/platform/using-airbyte/getting-started/oss-quickstart",
          "title": "Airbyte Open Source Quickstart",
          "publisher": "Airbyte",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-airflow-rest-api",
      "title": "Apache Airflow stable REST API boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Apache Airflow stable REST API.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-airflow-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:348c98486562cfe8113628a6917943c1ea29d1329e096a04118bd5c41a0583de",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-airflow-rest-api.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-airflow-rest-api",
      "facts": [
        {
          "id": "fact.apache.airflow-rest-api.role",
          "statement": "Apache Airflow documents a stable REST API for DAGs, DAG runs, task instances, datasets, pools, variables, connections, users, roles, and related resources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.airflow-rest-api"
          ]
        },
        {
          "id": "fact.apache.airflow-rest-api.read",
          "statement": "GET and list calls are distinct from creating DAG runs, changing state, managing variables or connections, deleting resources, and administrative actions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.airflow-rest-api"
          ]
        },
        {
          "id": "fact.apache.airflow-rest-api.write",
          "statement": "API authentication, RBAC roles, deployment configuration, secret backends, DAG code, executor, network policy, and object permissions bound actual access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.airflow-rest-api"
          ]
        },
        {
          "id": "fact.apache.airflow-rest-api.boundary",
          "statement": "An API response or created DAG run does not prove task success, idempotence, data quality, external side effects, or a secured scheduler deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.airflow-rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.apache.airflow-rest-api",
          "url": "https://airflow.apache.org/docs/apache-airflow/stable/stable-rest-api-ref.html",
          "title": "Apache Airflow Stable REST API Reference",
          "publisher": "Apache Airflow",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-arrow-current",
      "title": "Apache Arrow interchange boundary",
      "summary": "Official-source columnar/IPC validation, untrusted-data, initialization, extension, read/write, and process-boundary security for Apache Arrow.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-arrow-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:6f0912766e50cac88093cfd7167469a1ad9d088fe6c9af6406d7630dde90ea5a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-arrow-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-arrow-current",
      "facts": [
        {
          "id": "fact.arrow.security.model",
          "statement": "Arrow defines language-independent columnar and IPC representations and documents security considerations for standardized serialized data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arrow.security"
          ]
        },
        {
          "id": "fact.arrow.security.read",
          "statement": "Serialized Arrow from untrusted sources should be structurally and semantically validated before use because invalid buffers or metadata can cause unsafe access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arrow.security"
          ]
        },
        {
          "id": "fact.arrow.security.write",
          "statement": "Published arrays must not leak uninitialized buffer contents, and extension metadata deserialization must reject malformed or malicious payloads safely.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arrow.security"
          ]
        },
        {
          "id": "fact.arrow.security.boundary",
          "statement": "The C Data Interface contains process pointers and cannot safely accept an untrusted producer; format compatibility alone is not authentication, authorization, or data-truth evidence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arrow.security"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.arrow.security",
          "url": "https://arrow.apache.org/docs/format/Security.html",
          "title": "Apache Arrow Security Considerations",
          "publisher": "Apache Arrow",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-beam-model",
      "title": "Apache Beam programming-model boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Apache Beam programming-model.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-beam-model",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:d2a52a72d060d03ddc8c3819c687c3e504423d979520881a098ef13bc89b1c50",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-beam-model.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-beam-model",
      "facts": [
        {
          "id": "fact.apache.beam-model.role",
          "statement": "Apache Beam defines pipelines, PCollections, transforms, windowing, triggers, state, timers, schemas, and runner-portable execution concepts.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.beam-model"
          ]
        },
        {
          "id": "fact.apache.beam-model.read",
          "statement": "A pipeline graph remains a definition until a selected runner executes it; IO writes, external calls, state, and runner jobs are separate effects.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.beam-model"
          ]
        },
        {
          "id": "fact.apache.beam-model.write",
          "statement": "Runner credentials, project and cluster permissions, IO source and sink access, code artifacts, network policy, and resource quotas bound execution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.beam-model"
          ]
        },
        {
          "id": "fact.apache.beam-model.boundary",
          "statement": "Beam portability does not prove identical runner semantics, successful execution, exactly-once external effects, data quality, or a deployed job.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.beam-model"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.apache.beam-model",
          "url": "https://beam.apache.org/documentation/programming-guide/",
          "title": "Apache Beam Programming Guide",
          "publisher": "Apache Beam",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-cassandra-current",
      "title": "Apache Cassandra current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Apache Cassandra current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-cassandra-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:d5bac4a3c2c29307fb06ef0d69b341ed7215f00cf43eb4fe6af85ea1fcb07d55",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-cassandra-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-cassandra-current",
      "facts": [
        {
          "id": "fact.apache.cassandra-current.role",
          "statement": "Apache Cassandra Query Language covers schema definition, data modification, selection, indexing, types, functions, and permissions for Cassandra tables.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.cassandra-current"
          ]
        },
        {
          "id": "fact.apache.cassandra-current.read",
          "statement": "SELECT queries are distinct from INSERT, UPDATE, DELETE, batch, schema, and administrative operations and obey configured consistency behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.cassandra-current"
          ]
        },
        {
          "id": "fact.apache.cassandra-current.write",
          "statement": "Authentication, roles, grants, keyspace and table permissions, TLS, topology, consistency level, and repair operations determine effective access and durability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.cassandra-current"
          ]
        },
        {
          "id": "fact.apache.cassandra-current.boundary",
          "statement": "CQL compatibility does not prove cluster health, linearizable results, completed replication, factual data, or a correctly secured deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.cassandra-current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.apache.cassandra-current",
          "url": "https://cassandra.apache.org/doc/latest/cassandra/developing/cql/index.html",
          "title": "Apache Cassandra CQL",
          "publisher": "Apache Cassandra",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-couchdb-current",
      "title": "Apache CouchDB current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Apache CouchDB current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-couchdb-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:fe227484169537c77a785986169a852cbecc15337bfc39c0005f1f6be5fc20db",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-couchdb-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-couchdb-current",
      "facts": [
        {
          "id": "fact.apache.couchdb-current.role",
          "statement": "Apache CouchDB exposes database, document, design-document, replication, partition, and server operations through an HTTP API.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.couchdb-current"
          ]
        },
        {
          "id": "fact.apache.couchdb-current.read",
          "statement": "GET and read-oriented endpoints are distinct from PUT, POST, DELETE, compaction, replication, configuration, and administrative calls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.couchdb-current"
          ]
        },
        {
          "id": "fact.apache.couchdb-current.write",
          "statement": "Authentication, database security objects, validation functions, proxy and network policy, TLS, and cluster roles determine actual access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.couchdb-current"
          ]
        },
        {
          "id": "fact.apache.couchdb-current.boundary",
          "statement": "An HTTP API description does not prove a database is reachable, a revision is current, replication converged, a mutation succeeded, or a deployment is secure.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.couchdb-current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.apache.couchdb-current",
          "url": "https://docs.couchdb.org/en/stable/api/index.html",
          "title": "Apache CouchDB HTTP API Reference",
          "publisher": "Apache CouchDB",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-druid-sql-api",
      "title": "Apache Druid SQL API boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Apache Druid SQL API.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-druid-sql-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:aa37077f9b926e1c4acb8b94a8ec34f562d4f6b7e1e3f12bba2bb3b19457dc12",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-druid-sql-api.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-druid-sql-api",
      "facts": [
        {
          "id": "fact.apache.druid-sql-api.role",
          "statement": "Apache Druid exposes SQL query submission, parameters, result formats, headers, and cancellation through HTTP endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.druid-sql-api"
          ]
        },
        {
          "id": "fact.apache.druid-sql-api.read",
          "statement": "SQL queries are distinct from ingestion specs, task submission, compaction, segment management, coordinator, overlord, and security administration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.druid-sql-api"
          ]
        },
        {
          "id": "fact.apache.druid-sql-api.write",
          "statement": "Authentication, authorizers, datasource permissions, SQL context, resource limits, TLS, and cluster roles determine effective access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.druid-sql-api"
          ]
        },
        {
          "id": "fact.apache.druid-sql-api.boundary",
          "statement": "Druid SQL support does not prove relational equivalence, exact source freshness, query success, complete data, or a running secured cluster.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.druid-sql-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.apache.druid-sql-api",
          "url": "https://druid.apache.org/docs/latest/api-reference/sql-api/",
          "title": "Apache Druid SQL API",
          "publisher": "Apache Druid",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-flink-table-api",
      "title": "Apache Flink Table and SQL boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Apache Flink Table and SQL.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-flink-table-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:a3709f7e16a84bb0872660e17e165750985b1f47c50efb13c791a745d4fbd61d",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-flink-table-api.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-flink-table-api",
      "facts": [
        {
          "id": "fact.apache.flink-table-api.role",
          "statement": "Apache Flink Table API and SQL describe dynamic tables and relational operations for bounded and unbounded streams.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.flink-table-api"
          ]
        },
        {
          "id": "fact.apache.flink-table-api.read",
          "statement": "Table programs require an execution environment and connectors; sinks, state, checkpoints, DDL, and job-control operations are distinct effects.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.flink-table-api"
          ]
        },
        {
          "id": "fact.apache.flink-table-api.write",
          "statement": "Connector credentials, catalogs, cluster roles, filesystem and network access, state backends, checkpoints, and deployment policy bound execution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.flink-table-api"
          ]
        },
        {
          "id": "fact.apache.flink-table-api.boundary",
          "statement": "A valid table plan does not prove a job ran, event-time completeness, exactly-once behavior, connector guarantees, or secure production operation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.flink-table-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.apache.flink-table-api",
          "url": "https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/table/overview/",
          "title": "Flink Table API and SQL Overview",
          "publisher": "Apache Flink",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-hudi-current",
      "title": "Apache Hudi current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Apache Hudi current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-hudi-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:57a45e975d3827fc5cd9beea7859f3a0bebbcc1d4315f05c10db0d8b75c108c6",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-hudi-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-hudi-current",
      "facts": [
        {
          "id": "fact.apache.hudi-current.role",
          "statement": "Apache Hudi documents lakehouse tables with record-level changes, snapshot and incremental queries, indexing, clustering, cleaning, and timeline services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.hudi-current"
          ]
        },
        {
          "id": "fact.apache.hudi-current.read",
          "statement": "Reads are distinct from upserts, inserts, deletes, compaction, clustering, cleaning, rollback, and table-service execution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.hudi-current"
          ]
        },
        {
          "id": "fact.apache.hudi-current.write",
          "statement": "Storage and catalog credentials, engine integration, table type, concurrency control, locks, retention, and deployment configuration bound behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.hudi-current"
          ]
        },
        {
          "id": "fact.apache.hudi-current.boundary",
          "statement": "Hudi table semantics do not prove source correctness, exactly-once ingestion, universal engine compatibility, maintenance completion, or production security.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.hudi-current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.apache.hudi-current",
          "url": "https://hudi.apache.org/docs/overview/",
          "title": "Apache Hudi Overview",
          "publisher": "Apache Hudi",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-iceberg-current",
      "title": "Apache Iceberg table-format boundary",
      "summary": "Official-source open-table schema IDs, evolution, partitioning, transaction, catalog, read/write, and engine-integration boundaries for Apache Iceberg.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-iceberg-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:c06d4e7db3dad835b8fd014a659a5fe318393d6abfc45e1fc9e9034d9b7274ab",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-iceberg-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-iceberg-current",
      "facts": [
        {
          "id": "fact.iceberg.schemas.model",
          "statement": "Iceberg documents typed table schemas with persistent field IDs that are never reused within a table and supports explicit schema evolution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iceberg.schemas"
          ]
        },
        {
          "id": "fact.iceberg.schemas.read",
          "statement": "A compute engine reads table metadata and data files through its catalog and integration, and field IDs rather than names alone preserve column identity across evolution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iceberg.schemas"
          ]
        },
        {
          "id": "fact.iceberg.schemas.write",
          "statement": "Schema, partition, metadata, transaction, branch, and tag updates require explicit catalog and storage authority with concurrency handling.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iceberg.schemas"
          ]
        },
        {
          "id": "fact.iceberg.schemas.boundary",
          "statement": "A table-format specification provides no catalog, object-store credential, engine compatibility, access control, committed snapshot, data quality, or successful write evidence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iceberg.schemas"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.iceberg.schemas",
          "url": "https://iceberg.apache.org/docs/latest/schemas/",
          "title": "Apache Iceberg Schemas",
          "publisher": "Apache Iceberg",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-kafka-current",
      "title": "Apache Kafka event-stream boundary",
      "summary": "Official-source event API, configuration, operations, security, Connect, Streams, read/write, and deployment boundaries for Apache Kafka.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-kafka-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:49aa497895e4c6505be466ca582b0d25cdd271986f56ea94b87c74cb02e10a3f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-kafka-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-kafka-current",
      "facts": [
        {
          "id": "fact.kafka.documentation.model",
          "statement": "Kafka publishes versioned documentation that separates key concepts, APIs, configuration, design, implementation, operations, security, Connect, and Streams.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.kafka.documentation"
          ]
        },
        {
          "id": "fact.kafka.documentation.read",
          "statement": "Consumer reads depend on topic access, offsets, isolation, group configuration, retention, and the exact client and broker versions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.kafka.documentation"
          ]
        },
        {
          "id": "fact.kafka.documentation.write",
          "statement": "Producer writes require explicit topic authorization and delivery configuration; acknowledgement alone does not prove downstream consumption or processing.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.kafka.documentation"
          ]
        },
        {
          "id": "fact.kafka.documentation.boundary",
          "statement": "A documentation record creates no cluster, topic, credential, network access, producer, consumer, transaction, or end-to-end delivery evidence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.kafka.documentation"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.kafka.documentation",
          "url": "https://kafka.apache.org/documentation/",
          "title": "Apache Kafka Documentation",
          "publisher": "Apache Kafka",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-pinot-query",
      "title": "Apache Pinot query infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Apache Pinot query infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-pinot-query",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:b8f6e320980fe165267f59a50a0934a01e83a843141f8890add832e396056ded",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-pinot-query.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-pinot-query",
      "facts": [
        {
          "id": "fact.apache.pinot-query.role",
          "statement": "Apache Pinot documents SQL query submission through broker endpoints and query consoles over real-time and offline tables.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.pinot-query"
          ]
        },
        {
          "id": "fact.apache.pinot-query.read",
          "statement": "Queries are distinct from ingestion, schema and table configuration, segment upload, retention, controller changes, and cluster administration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.pinot-query"
          ]
        },
        {
          "id": "fact.apache.pinot-query.write",
          "statement": "Authentication, authorization, tenant and table access, query options, limits, routing, TLS, and deployment configuration bound operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.pinot-query"
          ]
        },
        {
          "id": "fact.apache.pinot-query.boundary",
          "statement": "A broker response does not prove source completeness, exact event-time coverage, successful ingestion, transaction semantics, or a secured cluster.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.pinot-query"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.apache.pinot-query",
          "url": "https://docs.pinot.apache.org/users/user-guide-query/querying-pinot",
          "title": "Querying Apache Pinot",
          "publisher": "Apache Pinot",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.apache-spark-sql",
      "title": "Apache Spark SQL infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Apache Spark SQL infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "apache-spark-sql",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:392aff9d1893c34b8024e137d5700581b0b6ac69ef4dd5050d8e7f8036adc222",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/apache-spark-sql.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/apache-spark-sql",
      "facts": [
        {
          "id": "fact.apache.spark-sql.role",
          "statement": "Apache Spark SQL provides SQL, DataFrame, and Dataset abstractions for structured batch and streaming data across supported sources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.spark-sql"
          ]
        },
        {
          "id": "fact.apache.spark-sql.read",
          "statement": "Lazy transformations define plans, while actions trigger distributed execution; writes, table changes, checkpoints, and cluster operations are separate effects.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.spark-sql"
          ]
        },
        {
          "id": "fact.apache.spark-sql.write",
          "statement": "Cluster manager, catalog, filesystem, table format, source credentials, code execution, configuration, and network policy bound actual access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.spark-sql"
          ]
        },
        {
          "id": "fact.apache.spark-sql.boundary",
          "statement": "A logical plan or successful job does not prove source correctness, deterministic output, exactly-once effects, complete compatibility, or secure deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.apache.spark-sql"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.apache.spark-sql",
          "url": "https://spark.apache.org/docs/latest/sql-programming-guide.html",
          "title": "Spark SQL, DataFrames and Datasets Guide",
          "publisher": "Apache Spark",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.clickhouse",
      "title": "ClickHouse analytical data boundary",
      "summary": "Official-source columnar OLAP, SQL, replication, RBAC, approximate-result, read/write, and evidence boundaries for ClickHouse analytics.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "clickhouse",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:845c9c9eb3a925021cb209f76d03fbb06cbe451c886c7a41b73f0f9fd7e80ace",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/clickhouse.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/clickhouse",
      "facts": [
        {
          "id": "fact.clickhouse.introduction.model",
          "statement": "ClickHouse is documented as a column-oriented SQL DBMS for OLAP, available as open-source software and a cloud offering.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.clickhouse.introduction"
          ]
        },
        {
          "id": "fact.clickhouse.introduction.read",
          "statement": "Analytical queries can filter and aggregate selected columns, and supported SQL behavior must be checked against the exact query and deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.clickhouse.introduction"
          ]
        },
        {
          "id": "fact.clickhouse.introduction.write",
          "statement": "Replication is asynchronous and role-based access control is separately configured; a write acknowledgement is not universal proof that every replica is current.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.clickhouse.introduction"
          ]
        },
        {
          "id": "fact.clickhouse.introduction.boundary",
          "statement": "Some calculations and sampled queries can be approximate, so an answer must declare exactness instead of treating every result as exact or transactional.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.clickhouse.introduction"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.clickhouse.introduction",
          "url": "https://clickhouse.com/docs/get-started/about/intro",
          "title": "What is ClickHouse?",
          "publisher": "ClickHouse",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.cockroachdb-current",
      "title": "CockroachDB current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for CockroachDB current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "cockroachdb-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:e13b38bf5d0d1d50a6a7ad9f31d12136ae03227491e556b7ecf3f7d3d7cd7c5d",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/cockroachdb-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/cockroachdb-current",
      "facts": [
        {
          "id": "fact.cockroachdb.current.role",
          "statement": "CockroachDB documents distributed SQL with a stated set of PostgreSQL-compatible and CockroachDB-specific language features.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cockroachdb.current"
          ]
        },
        {
          "id": "fact.cockroachdb.current.read",
          "statement": "Queries and transactions run through SQL sessions, while DML, DDL, schema changes, backup, restore, and cluster operations are distinct mutations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cockroachdb.current"
          ]
        },
        {
          "id": "fact.cockroachdb.current.write",
          "statement": "Users, roles, privileges, certificates, SQL authentication, network access, cluster settings, and transaction retry behavior bound actual use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cockroachdb.current"
          ]
        },
        {
          "id": "fact.cockroachdb.current.boundary",
          "statement": "Feature support does not prove exact PostgreSQL compatibility, a transaction avoided retries, data is correct, or a cluster is available and secure.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cockroachdb.current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cockroachdb.current",
          "url": "https://www.cockroachlabs.com/docs/stable/sql-feature-support",
          "title": "SQL Feature Support in CockroachDB",
          "publisher": "Cockroach Labs",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.dbt-core-sql-models",
      "title": "dbt Core SQL-model boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for dbt Core SQL-model.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "dbt-core-sql-models",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:03626abc89ef372512fc1d9a8b1367173dd5414d8d92e78e59d2dab62f6d77f3",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/dbt-core-sql-models.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/dbt-core-sql-models",
      "facts": [
        {
          "id": "fact.dbt.core-sql-models.role",
          "statement": "dbt SQL models define select statements and configuration that can be materialized as views, tables, incremental models, or ephemeral relations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dbt.core-sql-models"
          ]
        },
        {
          "id": "fact.dbt.core-sql-models.read",
          "statement": "Parsing and compiling are distinct from dbt run or build operations that execute warehouse SQL and create or change relations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dbt.core-sql-models"
          ]
        },
        {
          "id": "fact.dbt.core-sql-models.write",
          "statement": "Warehouse credentials, target, role, schema, grants, materialization, macros, packages, and CI or deployment policy bound actual writes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dbt.core-sql-models"
          ]
        },
        {
          "id": "fact.dbt.core-sql-models.boundary",
          "statement": "A compiled model does not prove it ran, source data is correct, tests passed, lineage is complete, or production relations were updated.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dbt.core-sql-models"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.dbt.core-sql-models",
          "url": "https://docs.getdbt.com/docs/build/sql-models",
          "title": "dbt SQL Models",
          "publisher": "dbt Labs",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.delta-lake-current",
      "title": "Delta Lake current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Delta Lake current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "delta-lake-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:f266925e004dfed70d6350e41068b6fd9d50fddb85b565a333877275a71197d7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/delta-lake-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/delta-lake-current",
      "facts": [
        {
          "id": "fact.delta.delta-lake-current.role",
          "statement": "Delta Lake documents transactional batch table creation, reads, appends, overwrite, update, delete, merge, schema handling, and history.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.delta.delta-lake-current"
          ]
        },
        {
          "id": "fact.delta.delta-lake-current.read",
          "statement": "Snapshot reads and time travel are distinct from writes, vacuum, optimize, protocol upgrades, schema mutation, and table replacement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.delta.delta-lake-current"
          ]
        },
        {
          "id": "fact.delta.delta-lake-current.write",
          "statement": "Object-store and catalog credentials, table permissions, retention policy, concurrent writers, engine version, and storage configuration bound operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.delta.delta-lake-current"
          ]
        },
        {
          "id": "fact.delta.delta-lake-current.boundary",
          "statement": "ACID table semantics do not prove source facts, cross-system transactions, complete reader compatibility, successful maintenance, or a secured deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.delta.delta-lake-current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.delta.delta-lake-current",
          "url": "https://docs.delta.io/latest/delta-batch.html",
          "title": "Delta Lake Batch Table Operations",
          "publisher": "Delta Lake",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.duckdb-current",
      "title": "DuckDB analytical data boundary",
      "summary": "Official-source in-process analytical concurrency, read-only, write-conflict, retry, and multi-process boundaries for DuckDB workloads.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "duckdb-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:0577a3c86a294243fefedd8fb5d1e17dbb2a6deb6a77151269a6d7c561002628",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/duckdb-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/duckdb-current",
      "facts": [
        {
          "id": "fact.duckdb.concurrency.model",
          "statement": "DuckDB documents in-process analytical concurrency with optimistic concurrency control and separate read-write and read-only modes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.duckdb.concurrency"
          ]
        },
        {
          "id": "fact.duckdb.concurrency.read",
          "statement": "Multiple processes can read a native database in read-only mode; configuration and file ownership still determine whether access is allowed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.duckdb.concurrency"
          ]
        },
        {
          "id": "fact.duckdb.concurrency.write",
          "statement": "Concurrent writes within one process can succeed without row conflicts, while conflicting updates can fail and require explicit application retry policy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.duckdb.concurrency"
          ]
        },
        {
          "id": "fact.duckdb.concurrency.boundary",
          "statement": "A successful connection or query plan does not establish safe multi-process writes, transaction success, authorization, backup, or production suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.duckdb.concurrency"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.duckdb.concurrency",
          "url": "https://duckdb.org/docs/current/connect/concurrency",
          "title": "Handling Concurrency",
          "publisher": "DuckDB Foundation",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.elasticsearch",
      "title": "Elasticsearch search infrastructure boundary",
      "summary": "Official-source search API, index privilege, bearer/basic/API-key authentication, query, mutation, and result boundaries for Elasticsearch.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "elasticsearch",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:633b11661dbd76ba1d92d90575efa55bef4cb7a259b1830166230b66d9f3a118",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/elasticsearch.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/elasticsearch",
      "facts": [
        {
          "id": "fact.elasticsearch.search-api.model",
          "statement": "Elasticsearch exposes GET and POST search operations across clusters, indexes, data streams, and aliases with explicit request and response contracts.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.elasticsearch.search-api"
          ]
        },
        {
          "id": "fact.elasticsearch.search-api.read",
          "statement": "Searching a secured target requires the applicable read index privilege, and cross-cluster or point-in-time searches add their own privilege boundaries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.elasticsearch.search-api"
          ]
        },
        {
          "id": "fact.elasticsearch.search-api.write",
          "statement": "Indexing, updating, deleting, API-key creation, and security changes are different operations and cannot be inferred from search access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.elasticsearch.search-api"
          ]
        },
        {
          "id": "fact.elasticsearch.search-api.boundary",
          "statement": "Bearer, basic, and API-key credentials are secrets; a search response does not prove completeness, freshness, exact ranking, mutation authority, or production integration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.elasticsearch.search-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.elasticsearch.search-api",
          "url": "https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html",
          "title": "Run a search",
          "publisher": "Elastic",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.grafana-http-api",
      "title": "Grafana HTTP API infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Grafana HTTP API infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "grafana-http-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:641d1a355f3b869e339c102a85ce4d1c7cb7075ef7909b969ff85831a1d030bb",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/grafana-http-api.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/grafana-http-api",
      "facts": [
        {
          "id": "fact.grafana.http-api.role",
          "statement": "Grafana documents HTTP APIs for dashboards, folders, data sources, alerting, annotations, service accounts, organizations, users, and other resources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.grafana.http-api"
          ]
        },
        {
          "id": "fact.grafana.http-api.read",
          "statement": "GET and search requests are distinct from POST, PUT, PATCH, DELETE, provisioning, alert changes, and administrative operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.grafana.http-api"
          ]
        },
        {
          "id": "fact.grafana.http-api.write",
          "statement": "Basic authentication, service-account tokens, role and resource permissions, organization scope, edition, and version determine allowed operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.grafana.http-api"
          ]
        },
        {
          "id": "fact.grafana.http-api.boundary",
          "statement": "API documentation does not prove an endpoint is enabled, a token is authorized, data-source results are correct, a write succeeded, or Grafana is deployed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.grafana.http-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.grafana.http-api",
          "url": "https://grafana.com/docs/grafana/latest/developers/http_api/",
          "title": "Grafana HTTP API",
          "publisher": "Grafana Labs",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.influxdb-3-core",
      "title": "InfluxDB 3 Core infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for InfluxDB 3 Core infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "influxdb-3-core",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:e5360239ec5b912b47503df981b4de76dd2587484cd01230794364f3207df448",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/influxdb-3-core.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/influxdb-3-core",
      "facts": [
        {
          "id": "fact.influxdata.influxdb-3-core.role",
          "statement": "InfluxDB 3 Core documents SQL and InfluxQL query interfaces over time-series data stored in a database.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.influxdata.influxdb-3-core"
          ]
        },
        {
          "id": "fact.influxdata.influxdb-3-core.read",
          "statement": "Querying is distinct from line-protocol writes, schema changes, retention, compaction, token management, and server administration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.influxdata.influxdb-3-core"
          ]
        },
        {
          "id": "fact.influxdata.influxdb-3-core.write",
          "statement": "Tokens, database permissions, host exposure, TLS, write endpoints, query limits, and storage configuration determine effective access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.influxdata.influxdb-3-core"
          ]
        },
        {
          "id": "fact.influxdata.influxdb-3-core.boundary",
          "statement": "A successful query does not prove sensor accuracy, completeness, current ingestion, write durability, or that a production server is deployed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.influxdata.influxdb-3-core"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.influxdata.influxdb-3-core",
          "url": "https://docs.influxdata.com/influxdb3/core/query-data/",
          "title": "InfluxDB 3 Core Query Data",
          "publisher": "InfluxData",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.mariadb-server",
      "title": "MariaDB Server infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for MariaDB Server infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "mariadb-server",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:874a1d59048130f350dca68cd831e7446f93c1b337c5e7432db178021e2b374f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/mariadb-server.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/mariadb-server",
      "facts": [
        {
          "id": "fact.mariadb.server.role",
          "statement": "MariaDB documents SQL data retrieval and manipulation statements for a relational database server.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mariadb.server"
          ]
        },
        {
          "id": "fact.mariadb.server.read",
          "statement": "SELECT and metadata reads are distinct from INSERT, UPDATE, DELETE, LOAD, transaction control, DDL, and administrative operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mariadb.server"
          ]
        },
        {
          "id": "fact.mariadb.server.write",
          "statement": "User accounts, authentication, roles, grants, database and table privileges, TLS, server variables, and network controls determine actual authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mariadb.server"
          ]
        },
        {
          "id": "fact.mariadb.server.boundary",
          "statement": "SQL syntax documentation does not prove a server is running, a statement is permitted, data is correct, a transaction committed, or compatibility is exact.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mariadb.server"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.mariadb.server",
          "url": "https://mariadb.com/docs/server/reference/sql-statements/data-manipulation/",
          "title": "MariaDB Data Manipulation",
          "publisher": "MariaDB",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.milvus-current",
      "title": "Milvus authentication boundary",
      "summary": "Official-source authentication enablement, TLS separation, user-credential, user-administration, and deployment boundaries for Milvus.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "milvus-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-08-28T07:50:57Z",
      "contentHash": "sha256:a8fc182056a4b995b1b0e9b8af9ab3bdae5cef79a9df628f9b6190b1dea7dbf2",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T07:50:57Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/milvus-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/milvus-current",
      "facts": [
        {
          "id": "fact.milvus.authentication-v3.model",
          "statement": "Milvus documents user authentication as an explicitly enabled server control and treats TLS and user authentication as distinct security approaches.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.milvus.authentication-v3"
          ]
        },
        {
          "id": "fact.milvus.authentication-v3.connect",
          "statement": "After authentication is enabled, a client connects with configured user credentials and an invalid token produces an authentication error.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.milvus.authentication-v3"
          ]
        },
        {
          "id": "fact.milvus.authentication-v3.administration",
          "statement": "Creating, updating, listing, or dropping users are separate authenticated administration operations rather than consequences of ordinary connectivity.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.milvus.authentication-v3"
          ]
        },
        {
          "id": "fact.milvus.authentication-v3.boundary",
          "statement": "The documentation shows a default root credential for initial access and separate password and super-user controls; a documentation record does not create a secured deployment or authorize any data operation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.milvus.authentication-v3"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.milvus.authentication-v3",
          "url": "https://raw.githubusercontent.com/milvus-io/milvus-docs/v3.0.x/site/en/adminGuide/authenticate.md",
          "title": "Authenticate User Access source document",
          "publisher": "Milvus",
          "observedAt": "2026-08-28T07:50:57Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.mongodb-current",
      "title": "MongoDB current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for MongoDB current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "mongodb-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:0ecbfcc7b8bf2bc2008114b6982373efadc75dd97b90f33a2ccca47c257a25d0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/mongodb-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/mongodb-current",
      "facts": [
        {
          "id": "fact.mongodb.current.role",
          "statement": "MongoDB documents create, read, update, and delete operations over BSON documents and collections.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mongodb.current"
          ]
        },
        {
          "id": "fact.mongodb.current.read",
          "statement": "Queries, aggregation, and read preferences are distinct from inserts, updates, replacements, deletes, index changes, and administrative commands.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mongodb.current"
          ]
        },
        {
          "id": "fact.mongodb.current.write",
          "statement": "Authentication, users, roles, database and collection privileges, TLS, network access, write concern, and deployment topology bound operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mongodb.current"
          ]
        },
        {
          "id": "fact.mongodb.current.boundary",
          "statement": "CRUD documentation does not prove a cluster exists, an operation is authorized, a write is durable, results are complete, or data is factually true.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mongodb.current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.mongodb.current",
          "url": "https://www.mongodb.com/docs/manual/crud/",
          "title": "MongoDB CRUD Operations",
          "publisher": "MongoDB",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.mysql-8.4",
      "title": "MySQL 8.4 infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for MySQL 8.4 infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "mysql-8.4",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:97a8d58e3b52acbba49a85ee167a011f0b5d762326816b84123c4bcd0e1d0261",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/mysql-8.4.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/mysql-8.4",
      "facts": [
        {
          "id": "fact.mysql.8-4.role",
          "statement": "MySQL 8.4 documents a relational database server, SQL language, clients, transactions, storage engines, replication, administration, and security.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mysql.8-4"
          ]
        },
        {
          "id": "fact.mysql.8-4.read",
          "statement": "Queries and reads occur through authenticated sessions, while INSERT, UPDATE, DELETE, DDL, replication, and administration are distinct state-changing operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mysql.8-4"
          ]
        },
        {
          "id": "fact.mysql.8-4.write",
          "statement": "Accounts, authentication plugins, roles, object privileges, transport security, network exposure, backups, and server configuration bound actual access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mysql.8-4"
          ]
        },
        {
          "id": "fact.mysql.8-4.boundary",
          "statement": "Manual coverage does not prove an instance exists, a query is authorized, data is current or correct, a transaction committed, or a deployment is secured.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mysql.8-4"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.mysql.8-4",
          "url": "https://dev.mysql.com/doc/refman/8.4/en/",
          "title": "MySQL 8.4 Reference Manual",
          "publisher": "Oracle MySQL",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.neo4j-cypher-current",
      "title": "Neo4j Cypher knowledge-graph boundary",
      "summary": "Official-source property-graph, Cypher version, query, mutation, access, vector/graph search, and deployment boundaries for Neo4j.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "neo4j-cypher-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:4ff6a946bc3302afe7e0e0dbafa7e34fa79f342398d46c5c1b44918ec97639e8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/neo4j-cypher-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/neo4j-cypher-current",
      "facts": [
        {
          "id": "fact.neo4j.cypher.model",
          "statement": "Cypher is Neo4j's declarative query language for property graph databases, and the current manual distinguishes Cypher 25 from frozen Cypher 5 behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.neo4j.cypher"
          ]
        },
        {
          "id": "fact.neo4j.cypher.read",
          "statement": "Graph matching, traversal, vector indexes, and other query behavior must be bound to the selected Cypher and database version plus database access policy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.neo4j.cypher"
          ]
        },
        {
          "id": "fact.neo4j.cypher.write",
          "statement": "Node, relationship, property, schema, and administrative mutations are different operations and require explicit transaction and authorization controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.neo4j.cypher"
          ]
        },
        {
          "id": "fact.neo4j.cypher.boundary",
          "statement": "A Cypher reference does not create a graph, authenticate a user, grant database privileges, validate generated queries, or prove completeness or factual truth of returned relationships.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.neo4j.cypher"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.neo4j.cypher",
          "url": "https://neo4j.com/docs/cypher-manual/current/introduction/",
          "title": "Cypher Manual Introduction",
          "publisher": "Neo4j",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.opensearch",
      "title": "OpenSearch data and search boundary",
      "summary": "Official-source encryption, authentication, role access, audit, index/document/field, read/write, and deployment boundaries for OpenSearch.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "opensearch",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:26c586febbba87dae8ad1fa4d54d49db28b469c50cc757b876caec45f0683e00",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/opensearch.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/opensearch",
      "facts": [
        {
          "id": "fact.opensearch.security.model",
          "statement": "OpenSearch security separates encryption, authentication, access control, and audit logging rather than treating login as the complete security boundary.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opensearch.security"
          ]
        },
        {
          "id": "fact.opensearch.security.read",
          "statement": "Roles can restrict cluster, index, document, and field access, so authenticated search results reflect configured authorization boundaries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opensearch.security"
          ]
        },
        {
          "id": "fact.opensearch.security.write",
          "statement": "Index writes, cluster settings, snapshots, and administrative actions require explicit role permissions separate from read or search access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opensearch.security"
          ]
        },
        {
          "id": "fact.opensearch.security.boundary",
          "statement": "Demo certificates or default passwords are not production evidence; documentation creates no secured cluster, role mapping, encrypted storage, audit trail, or successful query.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opensearch.security"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.opensearch.security",
          "url": "https://docs.opensearch.org/latest/security/",
          "title": "About security in OpenSearch",
          "publisher": "OpenSearch Project",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.postgresql-current",
      "title": "PostgreSQL current data infrastructure boundary",
      "summary": "Official-source relational transaction, authentication, read/write, version, and deployment boundaries for PostgreSQL-backed information services.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "postgresql-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:e56c2621ed699eccaf30911525a538e8b8066efc9cb1f9b8f16153d938e0267b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/postgresql-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/postgresql-current",
      "facts": [
        {
          "id": "fact.postgresql.current-docs.model",
          "statement": "PostgreSQL publishes versioned manuals and identifies PostgreSQL 18 as the current supported manual while separately listing beta and archived versions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.postgresql.current-docs"
          ]
        },
        {
          "id": "fact.postgresql.current-docs.read",
          "statement": "SQL queries and transaction semantics are versioned behavior; a connector must bind its claims and tests to the selected server and manual version.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.postgresql.current-docs"
          ]
        },
        {
          "id": "fact.postgresql.current-docs.write",
          "statement": "Writes occur within transaction semantics and still require database, schema, table, row, and operation privileges configured by the operator.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.postgresql.current-docs"
          ]
        },
        {
          "id": "fact.postgresql.current-docs.boundary",
          "statement": "Documentation availability does not create a database, grant authentication, authorize a mutation, or prove durability, replication, backup, or query success.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.postgresql.current-docs"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.postgresql.current-docs",
          "url": "https://www.postgresql.org/docs/",
          "title": "PostgreSQL Documentation",
          "publisher": "PostgreSQL Global Development Group",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.prometheus-promql",
      "title": "Prometheus PromQL infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Prometheus PromQL infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "prometheus-promql",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:053cf4d9d7c120192b9fd3322d4a46e2225261441d45e9354ae118aff4ecbf69",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/prometheus-promql.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/prometheus-promql",
      "facts": [
        {
          "id": "fact.prometheus.promql.role",
          "statement": "Prometheus Query Language selects and aggregates instant and range time-series data held by a Prometheus server.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.prometheus.promql"
          ]
        },
        {
          "id": "fact.prometheus.promql.read",
          "statement": "Read-only PromQL evaluation is distinct from scrape configuration, rule changes, remote write, target administration, deletion, and server lifecycle operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.prometheus.promql"
          ]
        },
        {
          "id": "fact.prometheus.promql.write",
          "statement": "Network exposure, reverse-proxy authentication, API controls, tenant boundaries, label policy, retention, and source configuration determine actual access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.prometheus.promql"
          ]
        },
        {
          "id": "fact.prometheus.promql.boundary",
          "statement": "A PromQL result reflects collected samples and query semantics and does not prove service health, causal explanation, complete telemetry, or a secured deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.prometheus.promql"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.prometheus.promql",
          "url": "https://prometheus.io/docs/prometheus/latest/querying/basics/",
          "title": "Prometheus Querying Basics",
          "publisher": "Prometheus",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.qdrant",
      "title": "Qdrant vector-search boundary",
      "summary": "Official-source vector collection, API-key, read-only/granular access, TLS, filter, mutation, and self-hosted security boundaries for Qdrant.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "qdrant",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:89b2c02cb6dc01e7fe7d11bc53f927ace352ab74701c2c3c4a8bd7a0f1b94961",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/qdrant.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/qdrant",
      "facts": [
        {
          "id": "fact.qdrant.security.model",
          "statement": "Qdrant documents vector search with collection data and supports admin, read-only, and granular per-collection API keys.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.qdrant.security"
          ]
        },
        {
          "id": "fact.qdrant.security.read",
          "statement": "Read-only or granular keys should constrain query consumers, while filters and indexes determine which payload-backed results are eligible and efficient.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.qdrant.security"
          ]
        },
        {
          "id": "fact.qdrant.security.write",
          "statement": "Collection creation, point upsert, payload changes, and deletion require separate write authority and must not be exposed through a query-only connector.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.qdrant.security"
          ]
        },
        {
          "id": "fact.qdrant.security.boundary",
          "statement": "Self-hosted Qdrant is not secure by default; authentication, private network binding, TLS, and audit configuration must be enabled before production exposure.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.qdrant.security"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.qdrant.security",
          "url": "https://qdrant.tech/documentation/security/",
          "title": "Security and Access Control",
          "publisher": "Qdrant",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.questdb-current",
      "title": "QuestDB current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for QuestDB current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "questdb-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:65f5cbe70a9002ebdefacf5c20114509569da9ef8b7aeaca2bc94d9ea720eac7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/questdb-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/questdb-current",
      "facts": [
        {
          "id": "fact.questdb.current.role",
          "statement": "QuestDB documents SQL over time-series tables through PostgreSQL wire and HTTP interfaces with time-series extensions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.questdb.current"
          ]
        },
        {
          "id": "fact.questdb.current.read",
          "statement": "Queries are distinct from ingestion, INSERT, schema changes, deduplication, retention, backup, and server-administration operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.questdb.current"
          ]
        },
        {
          "id": "fact.questdb.current.write",
          "statement": "Protocol authentication, network exposure, TLS, user permissions, ingestion endpoints, table design, and deployment edition determine effective access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.questdb.current"
          ]
        },
        {
          "id": "fact.questdb.current.boundary",
          "statement": "SQL support does not prove full PostgreSQL compatibility, source accuracy, write durability, current ingestion, or a deployed secure server.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.questdb.current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.questdb.current",
          "url": "https://questdb.com/docs/reference/sql/overview/",
          "title": "QuestDB SQL Overview",
          "publisher": "QuestDB",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.redis-open-source",
      "title": "Redis Open Source data boundary",
      "summary": "Official-source trusted-network, ACL, authentication, command/key, read/write, persistence, and exposure boundaries for Redis deployments.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "redis-open-source",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:8c0360d58a3087c2cd619fdc9eb7943320069aa1eadbf2a78e3d1db4d1bb31b4",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/redis-open-source.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/redis-open-source",
      "facts": [
        {
          "id": "fact.redis.security.model",
          "statement": "Redis documents a trusted-client and trusted-environment security model and warns against directly exposing its service to untrusted networks.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.redis.security"
          ]
        },
        {
          "id": "fact.redis.security.read",
          "statement": "ACL users can be restricted by commands and keys, so successful authentication must not be treated as unrestricted read access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.redis.security"
          ]
        },
        {
          "id": "fact.redis.security.write",
          "statement": "Write and administrative commands require separate least-privilege ACL decisions; dangerous configuration and destructive commands must not be exposed by default.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.redis.security"
          ]
        },
        {
          "id": "fact.redis.security.boundary",
          "statement": "Authentication, protected mode, persistence, replication, backup, and encryption are separate controls; a reachable endpoint is not evidence that any is correctly enabled.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.redis.security"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.redis.security",
          "url": "https://redis.io/docs/latest/operate/oss_and_stack/management/security/",
          "title": "Redis security",
          "publisher": "Redis",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.scylladb-current",
      "title": "ScyllaDB current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for ScyllaDB current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "scylladb-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:c2a9802aad2c8668267c92d12ba17511633b40f984411b8caf9aaa5a189ece71",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/scylladb-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/scylladb-current",
      "facts": [
        {
          "id": "fact.scylladb.current.role",
          "statement": "ScyllaDB documents a Cassandra-compatible CQL interface for schema, query, data manipulation, functions, types, and access control.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.scylladb.current"
          ]
        },
        {
          "id": "fact.scylladb.current.read",
          "statement": "Read queries and paging are distinct from writes, batches, schema changes, repair, backup, and cluster-administration operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.scylladb.current"
          ]
        },
        {
          "id": "fact.scylladb.current.write",
          "statement": "Authentication, roles, service levels, grants, TLS, consistency, topology, and deployment configuration determine actual behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.scylladb.current"
          ]
        },
        {
          "id": "fact.scylladb.current.boundary",
          "statement": "CQL syntax support does not prove full Cassandra equivalence, cluster availability, write durability, result completeness, or secure operation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.scylladb.current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.scylladb.current",
          "url": "https://docs.scylladb.com/manual/stable/cql/index.html",
          "title": "ScyllaDB CQL Reference",
          "publisher": "ScyllaDB",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.sqlite",
      "title": "SQLite embedded data boundary",
      "summary": "Official-source embedded SQL, runtime-limit, untrusted-input, connection, read/write, and deployment boundaries for SQLite-backed tools.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "sqlite",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:2058ab5883bd91eae1476d98cb3e2c86f471fec6a6eb1ae2a32888ca86b9820d",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/sqlite.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/sqlite",
      "facts": [
        {
          "id": "fact.sqlite.limits.model",
          "statement": "SQLite defines and tests implementation limits for sizes and quantities instead of treating finite memory and disk as unlimited.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sqlite.limits"
          ]
        },
        {
          "id": "fact.sqlite.limits.read",
          "statement": "Per-connection runtime limits can constrain databases influenced by hostile or untrusted inputs and should be chosen before exposing generated queries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sqlite.limits"
          ]
        },
        {
          "id": "fact.sqlite.limits.write",
          "statement": "Changing compile-time or runtime limits changes the accepted workload envelope but does not replace transaction, locking, backup, or application authorization controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sqlite.limits"
          ]
        },
        {
          "id": "fact.sqlite.limits.boundary",
          "statement": "An embedded library needs no remote service account, but documentation or file access does not authorize reading or changing a database owned by another application.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sqlite.limits"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.sqlite.limits",
          "url": "https://www.sqlite.org/limits.html",
          "title": "Implementation Limits For SQLite",
          "publisher": "SQLite",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.tidb-current",
      "title": "TiDB current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for TiDB current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "tidb-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:1448b1a563147a57a5a03ae2bd30934db70ac473ad08c5feb5ab2c5b0176ba06",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/tidb-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/tidb-current",
      "facts": [
        {
          "id": "fact.pingcap.tidb-current.role",
          "statement": "TiDB documents a distributed SQL database with MySQL protocol compatibility, transactional storage, analytical options, and horizontal scaling.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pingcap.tidb-current"
          ]
        },
        {
          "id": "fact.pingcap.tidb-current.read",
          "statement": "SQL reads are distinct from DML, DDL, placement, backup, restore, import, replication, and cluster-administration operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pingcap.tidb-current"
          ]
        },
        {
          "id": "fact.pingcap.tidb-current.write",
          "statement": "Accounts, roles, privileges, TLS, network policy, resource control, storage topology, and compatibility mode determine effective behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pingcap.tidb-current"
          ]
        },
        {
          "id": "fact.pingcap.tidb-current.boundary",
          "statement": "An architecture overview does not prove complete MySQL compatibility, cluster health, transaction success, query exactness, or a secured deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pingcap.tidb-current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.pingcap.tidb-current",
          "url": "https://docs.pingcap.com/tidb/stable/overview",
          "title": "TiDB Overview",
          "publisher": "PingCAP",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.trino-current",
      "title": "Trino current infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for Trino current infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "trino-current",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:bd22ab3653fc6a131b96a13cb0e606ed704ceb69996ede46564c1c3b7ccc32f5",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/trino-current.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/trino-current",
      "facts": [
        {
          "id": "fact.trino.current.role",
          "statement": "Trino documents a distributed SQL query engine in which a coordinator plans work across workers and catalogs backed by connectors.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.trino.current"
          ]
        },
        {
          "id": "fact.trino.current.read",
          "statement": "SELECT queries and metadata discovery are distinct from connector-supported writes, DDL, catalog changes, session administration, and cluster operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.trino.current"
          ]
        },
        {
          "id": "fact.trino.current.write",
          "statement": "Authentication, access-control rules, connector credentials, catalog properties, network security, resource groups, and connector capabilities bound actual behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.trino.current"
          ]
        },
        {
          "id": "fact.trino.current.boundary",
          "statement": "A Trino query does not prove source systems agree, writes are supported, results are complete, transactions span connectors, or a cluster is secure.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.trino.current"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.trino.current",
          "url": "https://trino.io/docs/current/overview/concepts.html",
          "title": "Trino Concepts",
          "publisher": "Trino Software Foundation",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.victoriametrics-query-api",
      "title": "VictoriaMetrics query API boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for VictoriaMetrics query API.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "victoriametrics-query-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:d1728c71df76f5c799aee7939fd11821bed44a825d742034b3cd9255da1196e1",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/victoriametrics-query-api.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/victoriametrics-query-api",
      "facts": [
        {
          "id": "fact.victoriametrics.query-api.role",
          "statement": "VictoriaMetrics documents Prometheus-compatible and MetricsQL HTTP query, metadata, label, export, import, and administration endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.victoriametrics.query-api"
          ]
        },
        {
          "id": "fact.victoriametrics.query-api.read",
          "statement": "Query and export endpoints are distinct from ingestion, deletion, snapshot, retention, relabeling, and cluster-administration operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.victoriametrics.query-api"
          ]
        },
        {
          "id": "fact.victoriametrics.query-api.write",
          "statement": "Tenant routing, reverse-proxy or enterprise authentication, network access, endpoint limits, retention, and deployment mode bound actual use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.victoriametrics.query-api"
          ]
        },
        {
          "id": "fact.victoriametrics.query-api.boundary",
          "statement": "Endpoint compatibility does not prove complete Prometheus equivalence, metric correctness, tenant isolation, successful ingestion, or a secured service.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.victoriametrics.query-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.victoriametrics.query-api",
          "url": "https://docs.victoriametrics.com/victoriametrics/url-examples/",
          "title": "VictoriaMetrics URL Examples",
          "publisher": "VictoriaMetrics",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.weaviate",
      "title": "Weaviate vector-data boundary",
      "summary": "Official-source API-key/OIDC/anonymous authentication, authorization, read-only, mutation, and deployment boundaries for Weaviate.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "weaviate",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:40:00Z",
      "contentHash": "sha256:0768536301c08ff7863566411919180d16e9e3af5e2a94d321b73d5df7fcd6c3",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:40:00Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/weaviate.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/weaviate",
      "facts": [
        {
          "id": "fact.weaviate.authentication.model",
          "statement": "Weaviate documents API-key and OpenID Connect authentication and distinguishes identity verification from authorization permissions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.weaviate.authentication"
          ]
        },
        {
          "id": "fact.weaviate.authentication.read",
          "statement": "An authenticated principal can be assigned read-only authorization, and an application must not infer broader object, collection, or administrative access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.weaviate.authentication"
          ]
        },
        {
          "id": "fact.weaviate.authentication.write",
          "statement": "Creating or changing data and schema requires write authority distinct from authentication and read-only access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.weaviate.authentication"
          ]
        },
        {
          "id": "fact.weaviate.authentication.boundary",
          "statement": "Anonymous access is strongly discouraged outside development or evaluation; documentation creates no instance, identity provider, key, role, dataset, or successful search.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.weaviate.authentication"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.weaviate.authentication",
          "url": "https://docs.weaviate.io/deploy/configuration/authentication",
          "title": "Authentication",
          "publisher": "Weaviate",
          "observedAt": "2026-08-27T01:40:00Z"
        }
      ]
    },
    {
      "id": "resource.infrastructure.yugabytedb-ysql",
      "title": "YugabyteDB YSQL infrastructure boundary",
      "summary": "Official-source query, mutation, authorization, deployment, and interpretation boundaries for YugabyteDB YSQL infrastructure.",
      "category": "data-knowledge-infrastructure",
      "resourceCategory": "data-knowledge-infrastructure",
      "slug": "yugabytedb-ysql",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:55ee8164ddf8b066d26d450f76866cdf93a3aba08bddfe8f64e16c17ac8c081a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/data-knowledge-infrastructure/yugabytedb-ysql.json",
      "htmlPath": "/resources/view/data-knowledge-infrastructure/yugabytedb-ysql",
      "facts": [
        {
          "id": "fact.yugabyte.ysql.role",
          "statement": "YugabyteDB YSQL exposes a PostgreSQL-compatible distributed SQL API for relational schema, queries, transactions, and administration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.yugabyte.ysql"
          ]
        },
        {
          "id": "fact.yugabyte.ysql.read",
          "statement": "SELECT and metadata reads are distinct from DML, DDL, index, backup, restore, replication, and cluster-configuration operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.yugabyte.ysql"
          ]
        },
        {
          "id": "fact.yugabyte.ysql.write",
          "statement": "Authentication, roles, grants, TLS, network policy, placement, transaction isolation, and deployment settings bound actual access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.yugabyte.ysql"
          ]
        },
        {
          "id": "fact.yugabyte.ysql.boundary",
          "statement": "YSQL documentation does not prove complete PostgreSQL compatibility, a cluster exists, a transaction committed, results are current, or security is configured.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.yugabyte.ysql"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.yugabyte.ysql",
          "url": "https://docs.yugabyte.com/stable/api/ysql/",
          "title": "YugabyteDB YSQL API",
          "publisher": "YugabyteDB",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.connector.atlassian-jira-cloud-rest-api",
      "title": "Atlassian Jira Cloud REST API connector boundary",
      "summary": "Official-source REST v3, OAuth 3LO, Forge/Connect, scope, user-permission, anonymous, read, and mutation boundaries for Jira connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "atlassian-jira-cloud-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:db4f0d035d3deb7cb9f70406549d4ddb0e7407847d87e83fe6f04b3792f0f4e3",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/atlassian-jira-cloud-rest-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/atlassian-jira-cloud-rest-api",
      "facts": [
        {
          "id": "fact.atlassian.jira-rest-v3.read",
          "statement": "Jira REST v3 exposes programmatic resource operations, and each operation documents scopes, permissions, anonymous availability, pagination, and response behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.atlassian.jira-rest-v3"
          ]
        },
        {
          "id": "fact.atlassian.jira-rest-v3.write",
          "statement": "A mutating operation requires both the API authorization mechanism and the calling user or app's Jira permissions for the target resource.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.atlassian.jira-rest-v3"
          ]
        },
        {
          "id": "fact.atlassian.jira-rest-v3.auth",
          "statement": "Forge uses scopes, Connect uses JWT and scopes or impersonation, and other integrations are directed to OAuth 2.0 authorization-code grants; basic auth is for personal scripts.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.atlassian.jira-rest-v3"
          ]
        },
        {
          "id": "fact.atlassian.jira-rest-v3.boundary",
          "statement": "Anonymous access exists only where an operation explicitly declares it and underlying Jira permissions permit it; authentication never bypasses project or issue security.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.atlassian.jira-rest-v3"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.atlassian.jira-rest-v3",
          "url": "https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro",
          "title": "The Jira Cloud platform REST API",
          "publisher": "Atlassian",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.github-rest-api",
      "title": "GitHub REST API connector boundary",
      "summary": "Official-source public-read, token, fine-grained permission, GitHub App, workflow-token, and write-operation boundaries for GitHub connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "github-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:58fde488558a7b1f078f33322348c0bf206c7f79af88609ee065d62bc4279963",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/github-rest-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/github-rest-api",
      "facts": [
        {
          "id": "fact.github.rest-auth.read",
          "statement": "Some GitHub REST endpoints expose public information without authentication, while authenticated requests can access additional endpoints and rate limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.github.rest-auth"
          ]
        },
        {
          "id": "fact.github.rest-auth.write",
          "statement": "Write operations require the endpoint's declared token permissions and remain separate from repository, organization, branch, or environment policy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.github.rest-auth"
          ]
        },
        {
          "id": "fact.github.rest-auth.auth",
          "statement": "GitHub supports personal access tokens, GitHub App tokens, and workflow GITHUB_TOKEN credentials; fine-grained tokens are recommended where supported.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.github.rest-auth"
          ]
        },
        {
          "id": "fact.github.rest-auth.boundary",
          "statement": "A token is an identity-bearing secret, and endpoint documentation plus accepted permissions must be checked before every read or mutation is exposed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.github.rest-auth"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.github.rest-auth",
          "url": "https://docs.github.com/en/rest/authentication/authenticating-to-the-rest-api?apiVersion=2026-03-10",
          "title": "Authenticating to the REST API",
          "publisher": "GitHub",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.gitlab-rest-api",
      "title": "GitLab REST API connector boundary",
      "summary": "Official-source public-read, OAuth, personal/project/group token, job-token, and endpoint-specific authorization boundaries for GitLab connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "gitlab-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:627e732d08c41a782b4a370fa1b34fc18c2aa673d4e7d3670c22d164c2c6b10c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/gitlab-rest-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/gitlab-rest-api",
      "facts": [
        {
          "id": "fact.gitlab.rest-auth.read",
          "statement": "GitLab documents some public endpoints that need no authentication, while most API requests require a supported credential.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gitlab.rest-auth"
          ]
        },
        {
          "id": "fact.gitlab.rest-auth.write",
          "statement": "A token type or successful login does not authorize every mutation; project, group, user, role, and endpoint rules still apply.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gitlab.rest-auth"
          ]
        },
        {
          "id": "fact.gitlab.rest-auth.auth",
          "statement": "Supported API credentials include OAuth, personal, project, group, and endpoint-limited CI job tokens, normally carried in authorization headers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gitlab.rest-auth"
          ]
        },
        {
          "id": "fact.gitlab.rest-auth.boundary",
          "statement": "Deploy tokens cannot call the public REST API, job tokens cover only documented endpoints, and administrator impersonation must never be a default connector mode.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gitlab.rest-auth"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.gitlab.rest-auth",
          "url": "https://docs.gitlab.com/api/rest/authentication/",
          "title": "REST API authentication",
          "publisher": "GitLab",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.google-workspace-apis",
      "title": "Google Workspace APIs connector boundary",
      "summary": "Official-source OAuth scope, user-consent, service-account, domain-wide delegation, and sensitive-scope boundaries for Google Workspace connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "google-workspace-apis",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:879850675d556568d13414a5a5748aa68985a032821b6a5828f5e97d20444f72",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/google-workspace-apis.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/google-workspace-apis",
      "facts": [
        {
          "id": "fact.google.workspace-oauth.read",
          "statement": "Each Google Workspace API defines OAuth scopes that state the data type and access level requested; a connector must select the narrowest API-specific scope.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.workspace-oauth"
          ]
        },
        {
          "id": "fact.google.workspace-oauth.write",
          "statement": "Write capability depends on the exact API method and granted scope and cannot be inferred from successful authentication or a broader product name.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.workspace-oauth"
          ]
        },
        {
          "id": "fact.google.workspace-oauth.auth",
          "statement": "User access uses OAuth consent; server-to-server access can use service accounts, and domain-wide delegation requires Workspace administrator authorization and explicit scopes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.workspace-oauth"
          ]
        },
        {
          "id": "fact.google.workspace-oauth.boundary",
          "statement": "Sensitive or restricted scopes can require additional review, and no connector may infer domain-wide access from a service-account credential alone.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.workspace-oauth"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.google.workspace-oauth",
          "url": "https://developers.google.com/workspace/guides/configure-oauth-consent",
          "title": "Configure the OAuth consent screen and choose scopes",
          "publisher": "Google",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.hubspot-crm-api",
      "title": "HubSpot CRM API connector boundary",
      "summary": "Official-source OAuth, single-account static-token, CRM read/write scope, token-lifecycle, and distribution boundaries for HubSpot connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "hubspot-crm-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:f718981a470b047cd52f3dcd5a8c8aba267bca1f2779cc58c20aa9b14676377b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/hubspot-crm-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/hubspot-crm-api",
      "facts": [
        {
          "id": "fact.hubspot.auth-overview.read",
          "statement": "HubSpot API access is limited by configured scopes, such as CRM object read scopes, and by the account that installed or authorized the app.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hubspot.auth-overview"
          ]
        },
        {
          "id": "fact.hubspot.auth-overview.write",
          "statement": "Creating CRM records requires the corresponding write scope; read access or token possession does not imply write permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hubspot.auth-overview"
          ]
        },
        {
          "id": "fact.hubspot.auth-overview.auth",
          "statement": "Multi-account distribution requires OAuth, while static auth is limited to one authorized account at a time; requests carry a bearer access token.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hubspot.auth-overview"
          ]
        },
        {
          "id": "fact.hubspot.auth-overview.boundary",
          "statement": "Client secrets and access or refresh tokens require secure lifecycle management and rotation and must never enter public connector metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hubspot.auth-overview"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.hubspot.auth-overview",
          "url": "https://developers.hubspot.com/docs/apps/developer-platform/build-apps/authentication/overview",
          "title": "Authentication overview",
          "publisher": "HubSpot",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.linear-graphql-api",
      "title": "Linear GraphQL API connector boundary",
      "summary": "Official-source GraphQL query/mutation, OAuth actor, read/write scope, targeted mutation, and personal-key boundaries for Linear connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "linear-graphql-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:2964ad1ffc9b099258d8fa28265836e460adfe54ed6d40dc26fd2b80a3258457",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/linear-graphql-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/linear-graphql-api",
      "facts": [
        {
          "id": "fact.linear.oauth.read",
          "statement": "Linear's GraphQL endpoint supports queries and OAuth read scope, which is always present for an authorized user account.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.linear.oauth"
          ]
        },
        {
          "id": "fact.linear.oauth.write",
          "statement": "Mutations require write or narrower scopes such as issues:create or comments:create; admin scope should not be requested unless strictly necessary.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.linear.oauth"
          ]
        },
        {
          "id": "fact.linear.oauth.auth",
          "statement": "OAuth 2.0 is recommended for integrations and can act as the authorizing user or as an application actor for agents and service accounts; personal API keys are for personal scripts.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.linear.oauth"
          ]
        },
        {
          "id": "fact.linear.oauth.boundary",
          "statement": "A GraphQL HTTP 200 can still contain errors, and authentication does not prove that a mutation succeeded or that its effects were accepted.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.linear.oauth"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.linear.oauth",
          "url": "https://linear.app/developers/oauth-2-0-authentication",
          "title": "OAuth 2.0 authentication",
          "publisher": "Linear",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.microsoft-graph",
      "title": "Microsoft Graph connector boundary",
      "summary": "Official-source delegated, application, read, write, consent, and least-privilege boundaries for Microsoft 365 data through Microsoft Graph.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "microsoft-graph",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:6fa9061c1d6178542318c9ef0dd949783056b94022f92a12322566bb5348fe24",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/microsoft-graph.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/microsoft-graph",
      "facts": [
        {
          "id": "fact.microsoft.graph-permissions.read",
          "statement": "Microsoft Graph permission names distinguish operations such as Read or ReadBasic and constraints such as All, Selected, Shared, or OwnedBy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.graph-permissions"
          ]
        },
        {
          "id": "fact.microsoft.graph-permissions.write",
          "statement": "ReadWrite permissions can authorize create, update, and delete operations and must not be substituted for a narrower read permission when writes are unnecessary.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.graph-permissions"
          ]
        },
        {
          "id": "fact.microsoft.graph-permissions.auth",
          "statement": "Delegated permissions act on behalf of a signed-in user, while application permissions act without one and generally require administrator consent.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.graph-permissions"
          ]
        },
        {
          "id": "fact.microsoft.graph-permissions.boundary",
          "statement": "The connector must request the least privileged endpoint-specific permission and still respect the signed-in user, tenant, resource, and RBAC boundaries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.graph-permissions"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.microsoft.graph-permissions",
          "url": "https://learn.microsoft.com/en-us/graph/permissions-overview",
          "title": "Overview of Microsoft Graph permissions",
          "publisher": "Microsoft",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.notion-api",
      "title": "Notion API connector boundary",
      "summary": "Official-source installation-token, page-sharing, connection-capability, read, write, and secret-storage boundaries for Notion connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "notion-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:5c9dcc9ff3553b1ea30016e641cdf5b9ee184a1f2eeb02cfac7143dffbe6788b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/notion-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/notion-api",
      "facts": [
        {
          "id": "fact.notion.authorization.read",
          "statement": "A Notion connection can read only content covered by its capabilities and pages or databases that users have shared with the connection.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.notion.authorization"
          ]
        },
        {
          "id": "fact.notion.authorization.write",
          "statement": "Create or update capability and endpoint requirements are distinct; some capabilities allow updating existing pages without allowing creation of new pages.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.notion.authorization"
          ]
        },
        {
          "id": "fact.notion.authorization.auth",
          "statement": "REST calls use an installation access token, and public connections require a user authorization flow while internal sharing is explicitly configured.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.notion.authorization"
          ]
        },
        {
          "id": "fact.notion.authorization.boundary",
          "statement": "The installation token is secret and belongs in a secret manager or environment, and missing page sharing must produce an authorization error rather than broader discovery.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.notion.authorization"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.notion.authorization",
          "url": "https://developers.notion.com/guides/get-started/authorization",
          "title": "Authorization",
          "publisher": "Notion",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.salesforce-rest-api",
      "title": "Salesforce REST API connector boundary",
      "summary": "Official-source external-client-app, OAuth client-credentials, integration-user, API-access, scope, and secret boundaries for Salesforce connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "salesforce-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-08-28T07:50:57Z",
      "contentHash": "sha256:7b606402a6b6df8af944d3f12b93e96b88b74a35cf02b6826e0951bf1c110609",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T07:50:57Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/salesforce-rest-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/salesforce-rest-api",
      "facts": [
        {
          "id": "fact.salesforce.client-credentials.model",
          "statement": "Salesforce documents the OAuth 2.0 client credentials flow for direct server-to-server information sharing without interactive user input.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.salesforce.client-credentials"
          ]
        },
        {
          "id": "fact.salesforce.client-credentials.access",
          "statement": "An external client app exchanges its client credentials for an access token and calls Salesforce APIs on behalf of an explicitly assigned integration user.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.salesforce.client-credentials"
          ]
        },
        {
          "id": "fact.salesforce.client-credentials.policy",
          "statement": "API access remains bounded by the external client app configuration, assigned OAuth scopes, integration-user permissions, and organization policy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.salesforce.client-credentials"
          ]
        },
        {
          "id": "fact.salesforce.client-credentials.boundary",
          "statement": "Consumer keys, client secrets, and access tokens are credentials; the official flow requires protecting and rotating them and does not grant broader access than the configured integration user.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.salesforce.client-credentials"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.salesforce.client-credentials",
          "url": "https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_client_credentials_flow.htm&language=en_US&type=5",
          "title": "OAuth 2.0 Client Credentials Flow for Server-to-Server Integration",
          "publisher": "Salesforce",
          "observedAt": "2026-08-28T07:50:57Z"
        }
      ]
    },
    {
      "id": "resource.connector.shopify-admin-graphql-api",
      "title": "Shopify Admin GraphQL API connector boundary",
      "summary": "Official-source merchant authorization, read/write access-scope, GraphQL field/mutation, protected-data, and revocation boundaries for Shopify connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "shopify-admin-graphql-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:ad9e743440f942787340559ec32c9e2bf91542c6265cfead4b10cc056365629b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/shopify-admin-graphql-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/shopify-admin-graphql-api",
      "facts": [
        {
          "id": "fact.shopify.access-scopes.read",
          "statement": "Shopify apps request resource-specific read scopes, and GraphQL fields document the access needed for store, customer, order, product, or other data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.shopify.access-scopes"
          ]
        },
        {
          "id": "fact.shopify.access-scopes.write",
          "statement": "Write scopes authorize both write and read for a resource, so an app should request write only when mutations are required.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.shopify.access-scopes"
          ]
        },
        {
          "id": "fact.shopify.access-scopes.auth",
          "statement": "Merchants approve declared scopes during installation, and some protected resources require additional Partner Dashboard permission before the scope can be requested.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.shopify.access-scopes"
          ]
        },
        {
          "id": "fact.shopify.access-scopes.boundary",
          "statement": "Granted scope state can change through uninstall or revocation, and authorization does not establish mutation success, payment, order acceptance, or merchant intent.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.shopify.access-scopes"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.shopify.access-scopes",
          "url": "https://shopify.dev/docs/api/usage/access-scopes",
          "title": "Shopify API access scopes",
          "publisher": "Shopify",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.slack-web-api",
      "title": "Slack Web API connector boundary",
      "summary": "Official-source read, write, transport, OAuth-token, scope, and secret-handling boundaries for a prospective Slack connector.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "slack-web-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:32480db0f43bcb85a90136824356178ec05b0c233e17450ea66ec146ca52c493",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/slack-web-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/slack-web-api",
      "facts": [
        {
          "id": "fact.slack.web-api.read",
          "statement": "Slack describes the Web API as HTTP RPC-style methods for querying workspace information, with each method documenting its required arguments and scopes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.slack.web-api"
          ]
        },
        {
          "id": "fact.slack.web-api.write",
          "statement": "The Web API also contains methods that enact workspace changes; most write methods accept JSON, and each mutating method must be separately allowlisted.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.slack.web-api"
          ]
        },
        {
          "id": "fact.slack.web-api.auth",
          "statement": "Requests use a user or bot bearer token negotiated through Slack OAuth 2.0, and the token must not be published or committed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.slack.web-api"
          ]
        },
        {
          "id": "fact.slack.web-api.boundary",
          "statement": "A method reference does not grant workspace access or authorize posting, editing, deleting, inviting, or reading private content.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.slack.web-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.slack.web-api",
          "url": "https://docs.slack.dev/apis/web-api/",
          "title": "Slack Web API",
          "publisher": "Slack",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.connector.stripe-api",
      "title": "Stripe API connector boundary",
      "summary": "Official-source sandbox/live, secret/publishable/restricted-key, server-side mutation, and financial-action boundaries for Stripe connectors.",
      "category": "enterprise-application-connectors",
      "resourceCategory": "enterprise-application-connector",
      "slug": "stripe-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:30:00Z",
      "contentHash": "sha256:779e6a282ce1e6e581bb96a27a03188cf0e7f76d16281dc5e795b69b62a7bf48",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:30:00Z"
      },
      "jsonPath": "/resources/enterprise-application-connectors/stripe-api.json",
      "htmlPath": "/resources/view/enterprise-application-connectors/stripe-api",
      "facts": [
        {
          "id": "fact.stripe.api-keys.read",
          "statement": "Server-side Stripe API reads authenticate with an account secret or restricted key, while publishable keys are limited to client-side operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.stripe.api-keys"
          ]
        },
        {
          "id": "fact.stripe.api-keys.write",
          "statement": "Secret keys can perform account API mutations, including financially consequential operations; restricted keys should limit resources and permissions wherever possible.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.stripe.api-keys"
          ]
        },
        {
          "id": "fact.stripe.api-keys.auth",
          "statement": "Sandbox and live keys are distinct, webhook signing secrets are separate credentials, and all server secrets must remain outside client code and version control.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.stripe.api-keys"
          ]
        },
        {
          "id": "fact.stripe.api-keys.boundary",
          "statement": "A prospective connector defaults to sandbox and read-only preparation; no payment, charge, refund, payout, subscription, transfer, or live-mode operation is authorized by this record.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.stripe.api-keys"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.stripe.api-keys",
          "url": "https://docs.stripe.com/keys",
          "title": "API keys",
          "publisher": "Stripe",
          "observedAt": "2026-08-27T01:30:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.agno-tools",
      "title": "Agno tool integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Agno tool integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "agno-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:a82ab52e44b4e299dc07b8bd4a30ec38fd734512e8780b2a9b9db61762183a86",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/agno-tools.json",
      "htmlPath": "/resources/view/platform-integration/agno-tools",
      "facts": [
        {
          "id": "fact.agno.tools.capability",
          "statement": "Agno agents can receive functions, toolkits, MCP tools, and other callable capabilities with runtime hooks and controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.agno.tools"
          ]
        },
        {
          "id": "fact.agno.tools.execution",
          "statement": "The agent runtime interprets a model tool call, invokes the selected implementation, and returns the result to the conversation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.agno.tools"
          ]
        },
        {
          "id": "fact.agno.tools.authorization",
          "statement": "Toolkit credentials, cache, retries, confirmation, stop conditions, filesystem and network access remain application-owned controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.agno.tools"
          ]
        },
        {
          "id": "fact.agno.tools.boundary",
          "statement": "Adding a toolkit does not prove a tool is safe, a call was authorized, an external action completed, or an agent service is deployed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.agno.tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.agno.tools",
          "url": "https://docs.agno.com/tools/overview",
          "title": "Agno Tools Overview",
          "publisher": "Agno",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.amazon-bedrock-agents-action-groups",
      "title": "Amazon Bedrock Agents action-group boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Amazon Bedrock Agents action-group.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "amazon-bedrock-agents-action-groups",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:e6a1161658762de1ba65e1c11f5c0d647736653a05aa50fdb664af68ce7284e3",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/amazon-bedrock-agents-action-groups.json",
      "htmlPath": "/resources/view/platform-integration/amazon-bedrock-agents-action-groups",
      "facts": [
        {
          "id": "fact.aws.bedrock-agents-action-groups.capability",
          "statement": "Amazon Bedrock Agents action groups define operations through function details or OpenAPI schemas and can use Lambda execution or return control to the caller.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aws.bedrock-agents-action-groups"
          ]
        },
        {
          "id": "fact.aws.bedrock-agents-action-groups.execution",
          "statement": "During orchestration the agent selects an action; AWS Lambda or the caller executes it and returns the result according to the configured mode.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aws.bedrock-agents-action-groups"
          ]
        },
        {
          "id": "fact.aws.bedrock-agents-action-groups.authorization",
          "statement": "Agent resource roles, Lambda policies, API credentials, schema validation, confirmation settings, and downstream permissions remain separate IAM and application controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aws.bedrock-agents-action-groups"
          ]
        },
        {
          "id": "fact.aws.bedrock-agents-action-groups.boundary",
          "statement": "Creating an action group does not prove an agent is prepared, invoked, authorized for a resource, successful, or connected to Plato's Kallipolis.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aws.bedrock-agents-action-groups"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.aws.bedrock-agents-action-groups",
          "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html",
          "title": "Add an action group to your agent in Amazon Bedrock",
          "publisher": "Amazon Web Services",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.anthropic-claude-tool-use",
      "title": "Anthropic Claude tool-use integration profile",
      "summary": "Official-source distinctions among client tools, server tools, tool-use blocks, tool results, and schema controls for Claude integrations.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "anthropic-claude-tool-use",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:01fce6f5e220f5ab1657b5ccb769c25a2a95c53c054e33796c2599b1b13aea0a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/anthropic-claude-tool-use.json",
      "htmlPath": "/resources/view/platform-integration/anthropic-claude-tool-use",
      "facts": [
        {
          "id": "fact.anthropic.tool-use.client-roundtrip",
          "statement": "For client tools, Claude returns a structured tool_use block; the application executes the operation and sends a tool_result back in a later Messages API request.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.anthropic.tool-use"
          ]
        },
        {
          "id": "fact.anthropic.tool-use.server-tools",
          "statement": "Anthropic server tools execute on Anthropic infrastructure, while application-defined client tools execute in the integrating application.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.anthropic.tool-use"
          ]
        },
        {
          "id": "fact.anthropic.tool-use.strict-schema",
          "statement": "A custom tool definition can request strict schema conformance, but the application remains responsible for authorization and the consequences of client-side execution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.anthropic.tool-use"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.anthropic.tool-use",
          "url": "https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview",
          "title": "Tool use with Claude",
          "publisher": "Anthropic",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.autogen-tools",
      "title": "Microsoft AutoGen tool integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Microsoft AutoGen tool integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "autogen-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:c4bc395c5eb16c2f7df83abf309aaf7538f0c345b1f200c88cb19a947d104c6e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/autogen-tools.json",
      "htmlPath": "/resources/view/platform-integration/autogen-tools",
      "facts": [
        {
          "id": "fact.microsoft.autogen-tools.capability",
          "statement": "AutoGen Core represents callable functions, workbenches, and related components as typed tools that agents can use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.autogen-tools"
          ]
        },
        {
          "id": "fact.microsoft.autogen-tools.execution",
          "statement": "The AutoGen runtime invokes registered tool implementations and returns their results; model output alone is only a proposed invocation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.autogen-tools"
          ]
        },
        {
          "id": "fact.microsoft.autogen-tools.authorization",
          "statement": "Tool code, subprocesses, workbenches, secrets, network access, and approval gates remain controlled by the hosting application.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.autogen-tools"
          ]
        },
        {
          "id": "fact.microsoft.autogen-tools.boundary",
          "statement": "A tool registration or agent message does not prove isolation, successful execution, external authorization, production deployment, or completed work.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.autogen-tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.microsoft.autogen-tools",
          "url": "https://microsoft.github.io/autogen/stable/user-guide/core-user-guide/components/tools.html",
          "title": "AutoGen Tools",
          "publisher": "Microsoft AutoGen",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.aws-bedrock-agentcore-tools",
      "title": "Amazon Bedrock AgentCore tool integration profile",
      "summary": "Official-source integration facts for declarative AgentCore tools, remote MCP, governed gateways, client-side functions, and IAM boundaries.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "aws-bedrock-agentcore-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:d7564b0bcc8ee978153375eb685859c8c46189a924ae83760443de429e30b3da",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/aws-bedrock-agentcore-tools.json",
      "htmlPath": "/resources/view/platform-integration/aws-bedrock-agentcore-tools",
      "facts": [
        {
          "id": "fact.aws.agentcore-tools.tool-types",
          "statement": "AgentCore harness tools are declared for the agent and include remote MCP, AgentCore Gateway, browser, code interpreter, and inline client-executed functions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aws.agentcore-tools"
          ]
        },
        {
          "id": "fact.aws.agentcore-tools.allowed-tools",
          "statement": "The allowedTools setting limits tool selection during harness invocation and should expose only the tools needed for the request.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aws.agentcore-tools"
          ]
        },
        {
          "id": "fact.aws.agentcore-tools.iam-boundary",
          "statement": "Direct Agent Runtime command execution is a separate API and IAM permission, so restricting model tool selection alone does not prevent that operation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aws.agentcore-tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.aws.agentcore-tools",
          "url": "https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/harness-tools.html",
          "title": "Tools - Amazon Bedrock AgentCore",
          "publisher": "Amazon Web Services",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.cloudflare-agents-sdk-mcp",
      "title": "Cloudflare Agents SDK and MCP integration profile",
      "summary": "Official-source implementation facts for Durable Object-backed Agent instances, client connections, and remote MCP tool discovery.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "cloudflare-agents-sdk-mcp",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:95cbcbd35100977ca60b8f9ae297757591895be69214ff88d7a9bb5cf18174c8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/cloudflare-agents-sdk-mcp.json",
      "htmlPath": "/resources/view/platform-integration/cloudflare-agents-sdk-mcp",
      "facts": [
        {
          "id": "fact.cloudflare.agents-api.runtime",
          "statement": "The Agents SDK exposes a server-side Agent class and client SDK; Agents require Cloudflare Durable Objects bindings.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cloudflare.agents-api"
          ]
        },
        {
          "id": "fact.cloudflare.agents-api.instance",
          "statement": "An Agent instance is addressed by a name or ID and can retain instance state and reconnect clients to that same instance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cloudflare.agents-api"
          ]
        },
        {
          "id": "fact.cloudflare.agents-api.mcp",
          "statement": "The Agents SDK can connect to remote MCP servers and adapt discovered tools for model calls, while tokens and OAuth settings belong in environment secrets rather than public records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cloudflare.agents-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cloudflare.agents-api",
          "url": "https://developers.cloudflare.com/agents/runtime/agents-api/",
          "title": "Agents API",
          "publisher": "Cloudflare",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.cohere-tool-use",
      "title": "Cohere tool-use integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Cohere tool-use integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "cohere-tool-use",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:01f0f10b95be427c73e9f578c2f11361f7b067277604fc6b73c3b77f415d332a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/cohere-tool-use.json",
      "htmlPath": "/resources/view/platform-integration/cohere-tool-use",
      "facts": [
        {
          "id": "fact.cohere.tool-use.capability",
          "statement": "Cohere Chat tool use connects Command models to application-defined functions and external services through structured tool definitions and tool calls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cohere.tool-use"
          ]
        },
        {
          "id": "fact.cohere.tool-use.execution",
          "statement": "The model produces a tool call, while the application maps the named function, executes it, and returns a tool-result message before requesting a grounded response.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cohere.tool-use"
          ]
        },
        {
          "id": "fact.cohere.tool-use.authorization",
          "statement": "A Cohere API key authorizes the model request only; each external tool keeps its own credentials, scopes, input validation, and side-effect policy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cohere.tool-use"
          ]
        },
        {
          "id": "fact.cohere.tool-use.boundary",
          "statement": "A declared tool or returned tool call does not prove execution, factual correctness, external-service authorization, successful mutation, or a Plato's Kallipolis production connection.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cohere.tool-use"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cohere.tool-use",
          "url": "https://docs.cohere.com/docs/tool-use-overview",
          "title": "Basic usage of tool use (function calling)",
          "publisher": "Cohere",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.crewai-tools",
      "title": "CrewAI tool integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for CrewAI tool integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "crewai-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:e56d6eef73102706b2ef8391da415646dcef923a48751029170fab152683cefb",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/crewai-tools.json",
      "htmlPath": "/resources/view/platform-integration/crewai-tools",
      "facts": [
        {
          "id": "fact.crewai.tools.capability",
          "statement": "CrewAI documents built-in and custom tools that extend an agent with search, file, API, database, and application functions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.crewai.tools"
          ]
        },
        {
          "id": "fact.crewai.tools.execution",
          "statement": "A crew or agent selects a registered tool and the CrewAI runtime calls its implementation with validated inputs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.crewai.tools"
          ]
        },
        {
          "id": "fact.crewai.tools.authorization",
          "statement": "Tool credentials, caching, error handling, rate limits, filesystem or network access, and side-effect approval remain explicit configuration boundaries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.crewai.tools"
          ]
        },
        {
          "id": "fact.crewai.tools.boundary",
          "statement": "Declaring a CrewAI tool does not prove the dependency is installed, the service is reachable, an action succeeded, or a production crew is active.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.crewai.tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.crewai.tools",
          "url": "https://docs.crewai.com/en/concepts/tools",
          "title": "CrewAI Tools",
          "publisher": "CrewAI",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.databricks-agent-mcp-tools",
      "title": "Databricks agent MCP-tool boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Databricks agent MCP-tool.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "databricks-agent-mcp-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:d206adda6352076c90425c8b83a645069e057d3d0a6fde223930acf30da41f1b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/databricks-agent-mcp-tools.json",
      "htmlPath": "/resources/view/platform-integration/databricks-agent-mcp-tools",
      "facts": [
        {
          "id": "fact.databricks.agent-mcp-tools.capability",
          "statement": "Databricks documents managed MCP servers that expose governed data and AI capabilities as tools for compatible agents and clients.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.databricks.agent-mcp-tools"
          ]
        },
        {
          "id": "fact.databricks.agent-mcp-tools.execution",
          "statement": "An MCP client discovers a tool and sends a call to the managed server, which executes within the configured Databricks service boundary.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.databricks.agent-mcp-tools"
          ]
        },
        {
          "id": "fact.databricks.agent-mcp-tools.authorization",
          "statement": "Workspace identity, Unity Catalog or service permissions, OAuth, endpoint access, tool scopes, and data governance remain independently enforced.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.databricks.agent-mcp-tools"
          ]
        },
        {
          "id": "fact.databricks.agent-mcp-tools.boundary",
          "statement": "Tool discovery or schema retrieval does not prove permission, execution, result correctness, production use, or that a Databricks workspace is connected.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.databricks.agent-mcp-tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.databricks.agent-mcp-tools",
          "url": "https://docs.databricks.com/aws/en/generative-ai/agent-framework/agent-tool",
          "title": "Use MCP tools with Databricks agents",
          "publisher": "Databricks",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.flowise-tools",
      "title": "Flowise agent-tool integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Flowise agent-tool integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "flowise-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:5887036e4cc2a1623c5eb3f10d3a04f5c1d008c5ead3a22524fd1080e58c2ded",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/flowise-tools.json",
      "htmlPath": "/resources/view/platform-integration/flowise-tools",
      "facts": [
        {
          "id": "fact.flowise.tools.capability",
          "statement": "Flowise documents tool nodes that can be attached to agent flows for APIs, search, data stores, code, and other functions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.flowise.tools"
          ]
        },
        {
          "id": "fact.flowise.tools.execution",
          "statement": "A deployed chatflow or agentflow runtime invokes configured tool nodes after model selection rather than the model executing services directly.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.flowise.tools"
          ]
        },
        {
          "id": "fact.flowise.tools.authorization",
          "statement": "Credentials, variables, allowed domains, code execution, flow access, and write approval remain deployment-specific responsibilities.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.flowise.tools"
          ]
        },
        {
          "id": "fact.flowise.tools.boundary",
          "statement": "A visual flow or tool node does not prove public deployment, sandboxing, successful external action, factual output, or a Plato's Kallipolis connection.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.flowise.tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.flowise.tools",
          "url": "https://docs.flowiseai.com/integrations/langchain/tools",
          "title": "Flowise LangChain Tools",
          "publisher": "Flowise",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.github-copilot-mcp",
      "title": "GitHub Copilot MCP integration profile",
      "summary": "Official-source prerequisites and governance facts for extending GitHub Copilot Chat with MCP server context and tools.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "github-copilot-mcp",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:be7fc81aecb392d4a0c307b13f32ea4c175051501446c98415a9bbae8e7140d4",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/github-copilot-mcp.json",
      "htmlPath": "/resources/view/platform-integration/github-copilot-mcp",
      "facts": [
        {
          "id": "fact.github.copilot-mcp.purpose",
          "statement": "GitHub documents MCP as a way to connect Copilot Chat with context and capabilities from other applications.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.github.copilot-mcp"
          ]
        },
        {
          "id": "fact.github.copilot-mcp.configuration",
          "statement": "MCP server support and configuration vary by IDE, Copilot access, client version, and organization or enterprise policy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.github.copilot-mcp"
          ]
        },
        {
          "id": "fact.github.copilot-mcp.policy",
          "statement": "For governed Copilot Business and Enterprise members, the MCP servers policy must be enabled; a configured server is not proof of successful tool invocation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.github.copilot-mcp"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.github.copilot-mcp",
          "url": "https://docs.github.com/en/copilot/how-tos/provide-context/use-mcp-in-your-ide/extend-copilot-chat-with-mcp",
          "title": "Extending GitHub Copilot Chat with MCP servers",
          "publisher": "GitHub",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.google-agents-cli-adk-lifecycle",
      "title": "Google Agents CLI and ADK lifecycle profile",
      "summary": "Official-source lifecycle facts for scaffolding, testing, evaluating, deploying, publishing, and observing Google ADK Agent projects.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "google-agents-cli-adk-lifecycle",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:2064e88fa093447ba4bcd85b73405cec61fafd6bd9b22347a53cf67af42ee315",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/google-agents-cli-adk-lifecycle.json",
      "htmlPath": "/resources/view/platform-integration/google-agents-cli-adk-lifecycle",
      "facts": [
        {
          "id": "fact.google.agents-cli.division",
          "statement": "Agents are built with Google's Agent Development Kit while Agents CLI handles surrounding scaffolding, evaluation, deployment, and observability workflows.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.agents-cli"
          ]
        },
        {
          "id": "fact.google.agents-cli.interfaces",
          "statement": "Agents CLI can be driven by an installed coding-agent skill set or by standalone terminal commands.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.agents-cli"
          ]
        },
        {
          "id": "fact.google.agents-cli.prototype",
          "statement": "A local prototype and playground are development states; deployment, publication, and observed production behavior require separate evidence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.agents-cli"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.google.agents-cli",
          "url": "https://google.github.io/agents-cli/guide/getting-started/",
          "title": "Getting Started - agents-cli",
          "publisher": "Google",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.google-gemini-function-calling",
      "title": "Google Gemini function-calling integration profile",
      "summary": "Official-source workflow facts for Gemini function declarations, application execution, tool-choice controls, and remote MCP server configuration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "google-gemini-function-calling",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:5dd0af2c24e3e9aba0e90ef502be02d21c00e2364eccc1d0812184f1f76f1986",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/google-gemini-function-calling.json",
      "htmlPath": "/resources/view/platform-integration/google-gemini-function-calling",
      "facts": [
        {
          "id": "fact.google.gemini-functions.execution",
          "statement": "The application declares a function, the model returns its name and structured arguments, and application code executes the function before returning a result.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.gemini-functions"
          ]
        },
        {
          "id": "fact.google.gemini-functions.choice",
          "statement": "Tool-choice modes control whether function calling is automatic, required, prohibited, or schema-validated where the documented model and API support that mode.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.gemini-functions"
          ]
        },
        {
          "id": "fact.google.gemini-functions.mcp",
          "statement": "The Interactions API documents remote MCP server tools with a server URL and optional allowed-tool restriction.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.gemini-functions"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.google.gemini-functions",
          "url": "https://ai.google.dev/gemini-api/docs/function-calling",
          "title": "Function calling with the Gemini API",
          "publisher": "Google",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.google-genkit-tool-calling",
      "title": "Google Genkit tool-calling boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Google Genkit tool-calling.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "google-genkit-tool-calling",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:a17e74397222b73e5649d10671750c4631d65f44282397b160ab26dfdc686ee6",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/google-genkit-tool-calling.json",
      "htmlPath": "/resources/view/platform-integration/google-genkit-tool-calling",
      "facts": [
        {
          "id": "fact.google.genkit-tool-calling.capability",
          "statement": "Genkit defines typed tools that models can request from flows and agent-style application logic.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.genkit-tool-calling"
          ]
        },
        {
          "id": "fact.google.genkit-tool-calling.execution",
          "statement": "The Genkit runtime executes the registered tool implementation and feeds its output back into generation; the model only proposes the call.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.genkit-tool-calling"
          ]
        },
        {
          "id": "fact.google.genkit-tool-calling.authorization",
          "statement": "Model configuration, deployment identity, tool secrets, data access, validation, and approval for external effects remain explicit boundaries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.genkit-tool-calling"
          ]
        },
        {
          "id": "fact.google.genkit-tool-calling.boundary",
          "statement": "A defined tool or successful local flow does not prove hosted deployment, external authorization, side-effect completion, or production traffic.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.genkit-tool-calling"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.google.genkit-tool-calling",
          "url": "https://genkit.dev/docs/tool-calling/",
          "title": "Genkit Tool Calling",
          "publisher": "Google Genkit",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.groq-tool-use",
      "title": "Groq tool-use integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Groq tool-use integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "groq-tool-use",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:e052440b2149086a336fd3e2d4be8fdc64505e6b93d57d60e5b90508d43ce697",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/groq-tool-use.json",
      "htmlPath": "/resources/view/platform-integration/groq-tool-use",
      "facts": [
        {
          "id": "fact.groq.tool-use.capability",
          "statement": "Groq documents local and server-side tool-use patterns through OpenAI-compatible chat requests with tool schemas and tool-choice controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.groq.tool-use"
          ]
        },
        {
          "id": "fact.groq.tool-use.execution",
          "statement": "For local tools the model returns structured calls and the client executes them before sending results back; remote tool behavior remains service-specific.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.groq.tool-use"
          ]
        },
        {
          "id": "fact.groq.tool-use.authorization",
          "statement": "Groq credentials, selected model support, tool credentials, organization controls, and mutation approval are separate authorization boundaries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.groq.tool-use"
          ]
        },
        {
          "id": "fact.groq.tool-use.boundary",
          "statement": "Tool-call compatibility varies by model and mode and does not prove deterministic selection, correct arguments, completed side effects, or a deployed integration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.groq.tool-use"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.groq.tool-use",
          "url": "https://console.groq.com/docs/tool-use",
          "title": "Groq Tool Use",
          "publisher": "Groq",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.haystack-tools",
      "title": "Haystack tool integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Haystack tool integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "haystack-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:12aa3b288f52ce6fb25769cafd1d8de45efc0eee4930e04b86b5c2bfa96d73d3",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/haystack-tools.json",
      "htmlPath": "/resources/view/platform-integration/haystack-tools",
      "facts": [
        {
          "id": "fact.haystack.tools.capability",
          "statement": "Haystack wraps functions, components, and toolsets in typed Tool definitions for use by tool-calling generators and agents.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.haystack.tools"
          ]
        },
        {
          "id": "fact.haystack.tools.execution",
          "statement": "A ToolInvoker or agent executes the referenced callable and returns its result; a language-model tool call is not the execution itself.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.haystack.tools"
          ]
        },
        {
          "id": "fact.haystack.tools.authorization",
          "statement": "Component secrets, pipelines, network destinations, write capabilities, and exception handling remain controlled by the application.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.haystack.tools"
          ]
        },
        {
          "id": "fact.haystack.tools.boundary",
          "statement": "A serialized Tool definition does not prove compatibility, safety, successful invocation, result quality, or a running Haystack deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.haystack.tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.haystack.tools",
          "url": "https://docs.haystack.deepset.ai/docs/tool",
          "title": "Haystack Tool",
          "publisher": "deepset Haystack",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.ibm-watsonx-orchestrate-adk",
      "title": "IBM watsonx Orchestrate Agent integration profile",
      "summary": "Official-source platform facts for Agent Development Kit projects, external tools, imported LangGraph agents, A2A collaboration, and governed operation.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "ibm-watsonx-orchestrate-adk",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:7583af7f21ddf5266a0de7d68c675be4901710f990b9448fbc4a22a3e4ddb2c2",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/ibm-watsonx-orchestrate-adk.json",
      "htmlPath": "/resources/view/platform-integration/ibm-watsonx-orchestrate-adk",
      "facts": [
        {
          "id": "fact.ibm.watsonx-developers.build",
          "statement": "watsonx Orchestrate documents low-code and pro-code Agent creation with its Agent Development Kit and supports importing existing LangGraph agents.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ibm.watsonx-developers"
          ]
        },
        {
          "id": "fact.ibm.watsonx-developers.tools",
          "statement": "The ADK can define Python or OpenAPI tools for local validation and later import into an Orchestrate environment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ibm.watsonx-developers"
          ]
        },
        {
          "id": "fact.ibm.watsonx-developers.governance",
          "statement": "Native, imported, and external A2A agents can be governed in the platform, but registration is separate from verified task completion or production value.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ibm.watsonx-developers"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ibm.watsonx-developers",
          "url": "https://www.ibm.com/products/watsonx-orchestrate/developers",
          "title": "AI agent development and deployment",
          "publisher": "IBM",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.langchain-tools",
      "title": "LangChain tool integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for LangChain tool integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "langchain-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:bd50ab74020e4a3c9ee017dd42150a0fad468137134bef2c94965fe5ed109ad3",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/langchain-tools.json",
      "htmlPath": "/resources/view/platform-integration/langchain-tools",
      "facts": [
        {
          "id": "fact.langchain.tools.capability",
          "statement": "LangChain tools expose callable functions and typed schemas to agents and can receive runtime context, state, or stores.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.langchain.tools"
          ]
        },
        {
          "id": "fact.langchain.tools.execution",
          "statement": "The agent chooses a tool call and the LangChain runtime invokes application code, middleware, or a configured tool node.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.langchain.tools"
          ]
        },
        {
          "id": "fact.langchain.tools.authorization",
          "statement": "Tool context, secrets, stores, external APIs, error handling, and human approval remain separate host-controlled boundaries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.langchain.tools"
          ]
        },
        {
          "id": "fact.langchain.tools.boundary",
          "statement": "Tool selection and schema conformance do not prove correct reasoning, authorized mutation, external completion, factual output, or production use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.langchain.tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.langchain.tools",
          "url": "https://docs.langchain.com/oss/python/langchain/tools",
          "title": "LangChain Tools",
          "publisher": "LangChain",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.langgraph-stateful-agent-runtime",
      "title": "LangGraph stateful Agent runtime profile",
      "summary": "Official-source architecture facts for modeling long-running, stateful Agent workflows through state, nodes, edges, durable execution, and human intervention.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "langgraph-stateful-agent-runtime",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:2f3ffd2f0b8ed9ad622e144430b46ce0df4bbf74bfea76b0e95d4c9f8ade081a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/langgraph-stateful-agent-runtime.json",
      "htmlPath": "/resources/view/platform-integration/langgraph-stateful-agent-runtime",
      "facts": [
        {
          "id": "fact.langchain.langgraph-overview.scope",
          "statement": "LangGraph is a low-level orchestration framework and runtime for long-running, stateful agents rather than a hosted model API.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.langchain.langgraph-overview"
          ]
        },
        {
          "id": "fact.langchain.langgraph-overview.capabilities",
          "statement": "The official overview emphasizes durable execution, streaming, human-in-the-loop control, and persistence for Agent orchestration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.langchain.langgraph-overview"
          ]
        },
        {
          "id": "fact.langchain.langgraph-overview.graph-model",
          "statement": "LangGraph workflows are modeled with shared state, nodes that perform work, and edges that determine subsequent execution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.langchain.langgraph-overview"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.langchain.langgraph-overview",
          "url": "https://docs.langchain.com/oss/python/langgraph/overview",
          "title": "LangGraph overview",
          "publisher": "LangChain",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.litellm-function-calling",
      "title": "LiteLLM function-calling compatibility boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for LiteLLM function-calling compatibility.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "litellm-function-calling",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:10c5462f293ab33fbc121115703da8c217ca046a99a6f027c1211935632c9e66",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/litellm-function-calling.json",
      "htmlPath": "/resources/view/platform-integration/litellm-function-calling",
      "facts": [
        {
          "id": "fact.litellm.function-calling.capability",
          "statement": "LiteLLM normalizes function and tool-calling requests and responses across multiple supported model providers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.litellm.function-calling"
          ]
        },
        {
          "id": "fact.litellm.function-calling.execution",
          "statement": "A completion can return tool-call names and arguments, while the client executes the corresponding function and sends the result back.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.litellm.function-calling"
          ]
        },
        {
          "id": "fact.litellm.function-calling.authorization",
          "statement": "Provider credentials, proxy policy, model access, budgets, downstream tool scopes, and mutation approval are independent controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.litellm.function-calling"
          ]
        },
        {
          "id": "fact.litellm.function-calling.boundary",
          "statement": "A normalized interface does not guarantee identical provider semantics, model support, safe arguments, external success, or a running proxy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.litellm.function-calling"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.litellm.function-calling",
          "url": "https://docs.litellm.ai/docs/completion/function_call",
          "title": "LiteLLM Function Calling",
          "publisher": "LiteLLM",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.llamaindex-tools",
      "title": "LlamaIndex agent-tool boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for LlamaIndex agent-tool.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "llamaindex-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:0676d00aa2e898abd254e84c6e3e314e826b33c363ed6328ea1e15377fd5f4ce",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/llamaindex-tools.json",
      "htmlPath": "/resources/view/platform-integration/llamaindex-tools",
      "facts": [
        {
          "id": "fact.llamaindex.tools.capability",
          "statement": "LlamaIndex represents functions, query engines, and other capabilities as Tools with names, descriptions, and typed arguments for agent use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.llamaindex.tools"
          ]
        },
        {
          "id": "fact.llamaindex.tools.execution",
          "statement": "An agent selects a Tool and the LlamaIndex runtime invokes its function or query engine and returns the result.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.llamaindex.tools"
          ]
        },
        {
          "id": "fact.llamaindex.tools.authorization",
          "statement": "Indexes, data connectors, model keys, external services, filesystem access, and mutations keep their own credentials and policy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.llamaindex.tools"
          ]
        },
        {
          "id": "fact.llamaindex.tools.boundary",
          "statement": "A Tool definition does not prove indexed data quality, safe execution, external authorization, successful side effects, or a deployed agent.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.llamaindex.tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.llamaindex.tools",
          "url": "https://developers.llamaindex.ai/python/framework/module_guides/deploying/agents/tools/",
          "title": "LlamaIndex Tools",
          "publisher": "LlamaIndex",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.mastra-agent-tools",
      "title": "Mastra agent-tool and MCP boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Mastra agent-tool and MCP.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "mastra-agent-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:1f19c5970a223dd78733462d7e98e30f8c7d9ed6e4d6e1a90f049a1e1e889a4e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/mastra-agent-tools.json",
      "htmlPath": "/resources/view/platform-integration/mastra-agent-tools",
      "facts": [
        {
          "id": "fact.mastra.agent-tools.capability",
          "statement": "Mastra agents can use locally defined tools and tools discovered through configured MCP clients.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mastra.agent-tools"
          ]
        },
        {
          "id": "fact.mastra.agent-tools.execution",
          "statement": "The Mastra runtime presents tool schemas to the model, executes selected local or MCP calls, and incorporates returned results.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mastra.agent-tools"
          ]
        },
        {
          "id": "fact.mastra.agent-tools.authorization",
          "statement": "MCP endpoints, transport credentials, local tool code, workspace access, and human approval for risky calls remain explicit configuration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mastra.agent-tools"
          ]
        },
        {
          "id": "fact.mastra.agent-tools.boundary",
          "statement": "Tool discovery does not prove server trust, execution success, result correctness, production deployment, or authorization for side effects.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.mastra.agent-tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.mastra.agent-tools",
          "url": "https://mastra.ai/docs/agents/using-tools-and-mcp",
          "title": "Mastra Agent Tools and MCP",
          "publisher": "Mastra",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.microsoft-foundry-agent-service",
      "title": "Microsoft Foundry Agent Service integration profile",
      "summary": "Official-source distinctions among prompt agents, hosted agents, Responses API access, managed tools, identity, and publication endpoints.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "microsoft-foundry-agent-service",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:c23c1dc11d8168569a61425660709e414e1d96bfc4e06f73b54abfe7dc0bda51",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/microsoft-foundry-agent-service.json",
      "htmlPath": "/resources/view/platform-integration/microsoft-foundry-agent-service",
      "facts": [
        {
          "id": "fact.microsoft.foundry-agents.agent-types",
          "statement": "Foundry Agent Service distinguishes service-managed prompt agents from containerized hosted agents that run custom framework or application code.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.foundry-agents"
          ]
        },
        {
          "id": "fact.microsoft.foundry-agents.responses-entry",
          "statement": "The Responses API is documented as an entry point for Foundry models and platform tools from an existing framework, process, or runtime.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.foundry-agents"
          ]
        },
        {
          "id": "fact.microsoft.foundry-agents.tools",
          "statement": "The service documents built-in tools, custom functions, and remote MCP servers, with authentication and authorization configured separately from discovery.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.foundry-agents"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.microsoft.foundry-agents",
          "url": "https://learn.microsoft.com/en-us/azure/foundry/agents/overview",
          "title": "What is Microsoft Foundry Agent Service?",
          "publisher": "Microsoft",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.n8n-ai-agent-tools",
      "title": "n8n AI Agent tool-node boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for n8n AI Agent tool-node.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "n8n-ai-agent-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:f3191fd763ed61c812115a462aa624fa527921886002d47ed6dd0efd2e13bd16",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/n8n-ai-agent-tools.json",
      "htmlPath": "/resources/view/platform-integration/n8n-ai-agent-tools",
      "facts": [
        {
          "id": "fact.n8n.ai-agent-tools.capability",
          "statement": "The n8n AI Agent node combines a model with connected tool sub-nodes inside an executable workflow.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.n8n.ai-agent-tools"
          ]
        },
        {
          "id": "fact.n8n.ai-agent-tools.execution",
          "statement": "The agent can select a connected tool and n8n executes the corresponding workflow node according to workflow configuration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.n8n.ai-agent-tools"
          ]
        },
        {
          "id": "fact.n8n.ai-agent-tools.authorization",
          "statement": "Node credentials, workflow publication, project roles, input data, retries, and confirmation for external writes remain separate controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.n8n.ai-agent-tools"
          ]
        },
        {
          "id": "fact.n8n.ai-agent-tools.boundary",
          "statement": "A workflow definition or successful model response does not prove the workflow is active, a tool ran, a side effect succeeded, or production access exists.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.n8n.ai-agent-tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.n8n.ai-agent-tools",
          "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/",
          "title": "n8n AI Agent node",
          "publisher": "n8n",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.nvidia-nemo-agent-toolkit",
      "title": "NVIDIA NeMo Agent Toolkit integration profile",
      "summary": "Official-source composition facts for framework-agnostic Agent workflows, typed asynchronous functions, and MCP or A2A client and server roles.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "nvidia-nemo-agent-toolkit",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:be3781653cda60ee235d128cb90ec9b15096049b73c3657af8ccddd9cf13aee4",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/nvidia-nemo-agent-toolkit.json",
      "htmlPath": "/resources/view/platform-integration/nvidia-nemo-agent-toolkit",
      "facts": [
        {
          "id": "fact.nvidia.nemo-agent-toolkit.composition",
          "statement": "NeMo Agent Toolkit represents agents, tools, and workflows as composable functions and can operate alongside multiple Agent frameworks.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nvidia.nemo-agent-toolkit"
          ]
        },
        {
          "id": "fact.nvidia.nemo-agent-toolkit.interfaces",
          "statement": "The toolkit documents both MCP and A2A client and server roles for connecting tools or delegating work across Agent systems.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nvidia.nemo-agent-toolkit"
          ]
        },
        {
          "id": "fact.nvidia.nemo-agent-toolkit.evidence-boundary",
          "statement": "Toolkit compatibility is a platform capability statement; each concrete integration still needs its own authentication, protocol, execution, and outcome evidence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nvidia.nemo-agent-toolkit"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nvidia.nemo-agent-toolkit",
          "url": "https://docs.nvidia.com/nemo/agent-toolkit/latest/index.html",
          "title": "NVIDIA NeMo Agent Toolkit Overview",
          "publisher": "NVIDIA",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.ollama-tool-calling",
      "title": "Ollama tool-calling integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Ollama tool-calling integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "ollama-tool-calling",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:7afceee310eba629a8079683e722bd8fc249d9d1b26ad365db8e130f12f7e48b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/ollama-tool-calling.json",
      "htmlPath": "/resources/view/platform-integration/ollama-tool-calling",
      "facts": [
        {
          "id": "fact.ollama.tool-calling.capability",
          "statement": "Ollama chat requests can provide tool definitions to supported local models and receive structured tool-call requests.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ollama.tool-calling"
          ]
        },
        {
          "id": "fact.ollama.tool-calling.execution",
          "statement": "The caller executes the selected function and appends the result to the conversation; Ollama does not make an arbitrary application function safe or authorized.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ollama.tool-calling"
          ]
        },
        {
          "id": "fact.ollama.tool-calling.authorization",
          "statement": "Local model access, network exposure, tool credentials, filesystem permissions, and write approval remain deployment and application responsibilities.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ollama.tool-calling"
          ]
        },
        {
          "id": "fact.ollama.tool-calling.boundary",
          "statement": "A local tool loop does not prove model suitability, argument correctness, sandboxing, external success, or that any Ollama service is running.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ollama.tool-calling"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ollama.tool-calling",
          "url": "https://docs.ollama.com/capabilities/tool-calling",
          "title": "Ollama Tool calling",
          "publisher": "Ollama",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.openai-agents-js-tools",
      "title": "OpenAI Agents SDK JavaScript tool boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for OpenAI Agents SDK JavaScript tool.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "openai-agents-js-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:c8060d7f9a25b37f5797afeb2100d6efeac8af2a48edc6b693d7a4d7357dac08",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/openai-agents-js-tools.json",
      "htmlPath": "/resources/view/platform-integration/openai-agents-js-tools",
      "facts": [
        {
          "id": "fact.openai.agents-js-tools.capability",
          "statement": "The OpenAI Agents SDK for JavaScript supports hosted tools, local function tools, agents-as-tools, and MCP servers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.agents-js-tools"
          ]
        },
        {
          "id": "fact.openai.agents-js-tools.execution",
          "statement": "The SDK runner coordinates model requests and calls configured JavaScript functions or remote tool providers rather than the model directly performing side effects.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.agents-js-tools"
          ]
        },
        {
          "id": "fact.openai.agents-js-tools.authorization",
          "statement": "Runtime secrets, hosted-tool options, MCP server trust, function context, guardrails, and approval remain developer-controlled boundaries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.agents-js-tools"
          ]
        },
        {
          "id": "fact.openai.agents-js-tools.boundary",
          "statement": "JavaScript SDK compatibility does not prove a tool ran, an action was authorized, a result is true, or a production agent is active.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.agents-js-tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.openai.agents-js-tools",
          "url": "https://openai.github.io/openai-agents-js/guides/tools/",
          "title": "OpenAI Agents SDK JavaScript Tools",
          "publisher": "OpenAI",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.openai-agents-python-tools",
      "title": "OpenAI Agents SDK Python tool boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for OpenAI Agents SDK Python tool.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "openai-agents-python-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:fdcc144fedda01db0fc9fe653aef4a966a8ea8202084df74d82b20c4b42f2c50",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/openai-agents-python-tools.json",
      "htmlPath": "/resources/view/platform-integration/openai-agents-python-tools",
      "facts": [
        {
          "id": "fact.openai.agents-python-tools.capability",
          "statement": "The OpenAI Agents SDK for Python supports hosted tools, function tools, agents-as-tools, and MCP-backed tools.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.agents-python-tools"
          ]
        },
        {
          "id": "fact.openai.agents-python-tools.execution",
          "statement": "The SDK runtime manages model tool requests and invokes configured functions, agents, hosted services, or MCP servers according to the run loop.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.agents-python-tools"
          ]
        },
        {
          "id": "fact.openai.agents-python-tools.authorization",
          "statement": "OpenAI API access, hosted-tool configuration, function permissions, MCP trust, guardrails, and approval for sensitive calls remain separate controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.agents-python-tools"
          ]
        },
        {
          "id": "fact.openai.agents-python-tools.boundary",
          "statement": "A tool declaration or trace does not prove external completion, business authorization, factual correctness, organic use, or production deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.agents-python-tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.openai.agents-python-tools",
          "url": "https://openai.github.io/openai-agents-python/tools/",
          "title": "OpenAI Agents SDK Python Tools",
          "publisher": "OpenAI",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.openai-responses-api-tools",
      "title": "OpenAI Responses API tool integration profile",
      "summary": "Official-source integration facts for creating Responses API calls and attaching built-in or application-defined tools without implying a live Plato's Kallipolis connection.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "openai-responses-api-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-08-28T03:20:13Z",
      "contentHash": "sha256:a42c58f1e658e65636af73f1766246015d6262b028a99cb2b5dd9a47a1d3e76b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T03:20:13Z"
      },
      "jsonPath": "/resources/platform-integration/openai-responses-api-tools.json",
      "htmlPath": "/resources/view/platform-integration/openai-responses-api-tools",
      "facts": [
        {
          "id": "fact.openai.responses.responses",
          "statement": "The Responses API creates model output through POST /responses, while official SDKs expose the corresponding responses.create operation with a selected model and input.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.responses"
          ]
        },
        {
          "id": "fact.openai.responses.tools",
          "statement": "A Responses create request can attach built-in tools, MCP tools, and custom function calls, with tool_choice controlling how the model selects them.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.responses"
          ]
        },
        {
          "id": "fact.openai.responses.boundary",
          "statement": "Documentation of a tool type does not prove that Plato's Kallipolis has authenticated, invoked, or passed conformance tests against that tool.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openai.responses"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.openai.responses",
          "url": "https://developers.openai.com/api/reference/cli/resources/responses/methods/create",
          "title": "Create a model response",
          "publisher": "OpenAI",
          "observedAt": "2026-08-28T03:20:13Z"
        }
      ]
    },
    {
      "id": "resource.platform.oracle-generative-ai-agents",
      "title": "Oracle OCI Generative AI Agents boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Oracle OCI Generative AI Agents.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "oracle-generative-ai-agents",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:e8f55f01f99d28c49b24f4fc4dfed0d9f2fac242239307d498675e99c53e49d0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/oracle-generative-ai-agents.json",
      "htmlPath": "/resources/view/platform-integration/oracle-generative-ai-agents",
      "facts": [
        {
          "id": "fact.oracle.generative-ai-agents.capability",
          "statement": "OCI Generative AI Agents provides managed agent, knowledge-base, data-source, endpoint, and tool concepts for retrieval and action workflows.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.oracle.generative-ai-agents"
          ]
        },
        {
          "id": "fact.oracle.generative-ai-agents.execution",
          "statement": "A client invokes an agent endpoint and OCI coordinates configured retrieval or tool behavior within the agent service.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.oracle.generative-ai-agents"
          ]
        },
        {
          "id": "fact.oracle.generative-ai-agents.authorization",
          "statement": "OCI IAM policy, compartment, endpoint, data-source credentials, network access, and downstream action permissions remain separate controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.oracle.generative-ai-agents"
          ]
        },
        {
          "id": "fact.oracle.generative-ai-agents.boundary",
          "statement": "Creating an agent or endpoint does not prove indexed content quality, successful tool execution, production traffic, or connection to this platform.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.oracle.generative-ai-agents"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.oracle.generative-ai-agents",
          "url": "https://docs.oracle.com/en-us/iaas/Content/generative-ai-agents/home.htm",
          "title": "OCI Generative AI Agents",
          "publisher": "Oracle",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.pydantic-ai-tools",
      "title": "Pydantic AI tool integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Pydantic AI tool integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "pydantic-ai-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:6515bce3c82268d6986e5715c34ba90553546ae237417d294342cfce95c37e91",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/pydantic-ai-tools.json",
      "htmlPath": "/resources/view/platform-integration/pydantic-ai-tools",
      "facts": [
        {
          "id": "fact.pydantic-ai.tools.capability",
          "statement": "Pydantic AI exposes registered Python functions and toolsets to supported models with typed arguments and dependency context.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pydantic-ai.tools"
          ]
        },
        {
          "id": "fact.pydantic-ai.tools.execution",
          "statement": "The agent runtime validates a requested call, executes application code, can retry validation failures, and returns the function result to the model.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pydantic-ai.tools"
          ]
        },
        {
          "id": "fact.pydantic-ai.tools.authorization",
          "statement": "Run context, dependencies, secrets, external clients, retry policy, and approval for mutations remain application-owned.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pydantic-ai.tools"
          ]
        },
        {
          "id": "fact.pydantic-ai.tools.boundary",
          "statement": "Type validation reduces malformed inputs but does not prove business authorization, safe side effects, factual results, external success, or deployment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pydantic-ai.tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.pydantic-ai.tools",
          "url": "https://ai.pydantic.dev/tools/",
          "title": "Pydantic AI Function Tools",
          "publisher": "Pydantic",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.rasa-custom-actions",
      "title": "Rasa custom-action server boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Rasa custom-action server.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "rasa-custom-actions",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:79993383dd641591e6ed85574db91c51194bb5d6bfe34a04311c0a8a2a498448",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/rasa-custom-actions.json",
      "htmlPath": "/resources/view/platform-integration/rasa-custom-actions",
      "facts": [
        {
          "id": "fact.rasa.custom-actions.capability",
          "statement": "Rasa custom actions run application code through an action server and can return events and responses to the dialogue engine.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rasa.custom-actions"
          ]
        },
        {
          "id": "fact.rasa.custom-actions.execution",
          "statement": "The dialogue policy predicts an action name, the Rasa server calls the action endpoint, and the action server executes the implementation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rasa.custom-actions"
          ]
        },
        {
          "id": "fact.rasa.custom-actions.authorization",
          "statement": "Action-server authentication, network isolation, secrets, database or API permissions, input validation, and side-effect approval remain deployment responsibilities.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rasa.custom-actions"
          ]
        },
        {
          "id": "fact.rasa.custom-actions.boundary",
          "statement": "An action name or server response does not prove policy correctness, safe code, external success, production deployment, or completed user intent.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rasa.custom-actions"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.rasa.custom-actions",
          "url": "https://rasa.com/docs/reference/integrations/action-server/actions/",
          "title": "Rasa Custom Actions",
          "publisher": "Rasa",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.semantic-kernel-plugins",
      "title": "Semantic Kernel plugin integration boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Semantic Kernel plugin integration.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "semantic-kernel-plugins",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:11cb7c3e1b223d3b22ccc75d0890792c0a74622707eaf5e1f372dceda23703f8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/semantic-kernel-plugins.json",
      "htmlPath": "/resources/view/platform-integration/semantic-kernel-plugins",
      "facts": [
        {
          "id": "fact.microsoft.semantic-kernel-plugins.capability",
          "statement": "Semantic Kernel plugins group functions that can be exposed to an AI application from native code, OpenAPI descriptions, or compatible plugin sources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.semantic-kernel-plugins"
          ]
        },
        {
          "id": "fact.microsoft.semantic-kernel-plugins.execution",
          "statement": "Kernel orchestration can advertise plugin functions to a model and invoke selected functions through the application runtime.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.semantic-kernel-plugins"
          ]
        },
        {
          "id": "fact.microsoft.semantic-kernel-plugins.authorization",
          "statement": "Importing a plugin does not grant its downstream API, filesystem, identity, or mutation permissions; credentials and filters remain host responsibilities.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.semantic-kernel-plugins"
          ]
        },
        {
          "id": "fact.microsoft.semantic-kernel-plugins.boundary",
          "statement": "Plugin metadata and function selection do not prove safe execution, successful side effects, factual output, or a deployed Semantic Kernel service.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.microsoft.semantic-kernel-plugins"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.microsoft.semantic-kernel-plugins",
          "url": "https://learn.microsoft.com/en-us/semantic-kernel/concepts/plugins/",
          "title": "What are plugins in Semantic Kernel?",
          "publisher": "Microsoft",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.snowflake-cortex-agents",
      "title": "Snowflake Cortex Agents tool boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Snowflake Cortex Agents tool.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "snowflake-cortex-agents",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:946bc5f524ae35a1af9e605a65c300e709f5e2786cc8dc58f878af7cbd71a00c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/snowflake-cortex-agents.json",
      "htmlPath": "/resources/view/platform-integration/snowflake-cortex-agents",
      "facts": [
        {
          "id": "fact.snowflake.cortex-agents.capability",
          "statement": "Snowflake Cortex Agents orchestrate supported tools such as Cortex Analyst, Cortex Search, and configured custom capabilities for a user request.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.snowflake.cortex-agents"
          ]
        },
        {
          "id": "fact.snowflake.cortex-agents.execution",
          "statement": "The agent service selects tools and coordinates calls against configured Snowflake resources, returning a response and tool-use details.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.snowflake.cortex-agents"
          ]
        },
        {
          "id": "fact.snowflake.cortex-agents.authorization",
          "statement": "Roles, warehouse access, semantic models, search services, data privileges, network policies, and custom-tool permissions remain Snowflake account controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.snowflake.cortex-agents"
          ]
        },
        {
          "id": "fact.snowflake.cortex-agents.boundary",
          "statement": "An agent object or API response does not prove source completeness, authorized data use, factual correctness, successful mutation, or a Plato's Kallipolis integration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.snowflake.cortex-agents"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.snowflake.cortex-agents",
          "url": "https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents",
          "title": "Snowflake Cortex Agents",
          "publisher": "Snowflake",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.spring-ai-tools",
      "title": "Spring AI tool-calling boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for Spring AI tool-calling.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "spring-ai-tools",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:b27df1822eced1e7f3424d88c1f5a15f17691d8236af6e3fb792eb21a508846c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/spring-ai-tools.json",
      "htmlPath": "/resources/view/platform-integration/spring-ai-tools",
      "facts": [
        {
          "id": "fact.spring-ai.tools.capability",
          "statement": "Spring AI turns annotated methods and ToolCallback implementations into tool definitions available to supported chat models.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.spring-ai.tools"
          ]
        },
        {
          "id": "fact.spring-ai.tools.execution",
          "statement": "The chat client receives a model tool request, invokes application code through registered callbacks, and returns results to the model.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.spring-ai.tools"
          ]
        },
        {
          "id": "fact.spring-ai.tools.authorization",
          "statement": "Bean scope, dependencies, credentials, observation, exception handling, and approval for state-changing methods remain host responsibilities.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.spring-ai.tools"
          ]
        },
        {
          "id": "fact.spring-ai.tools.boundary",
          "statement": "A ToolCallback schema does not prove model reliability, transaction authorization, external success, factual output, or a running Spring application.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.spring-ai.tools"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.spring-ai.tools",
          "url": "https://docs.spring.io/spring-ai/reference/api/tools.html",
          "title": "Spring AI Tool Calling",
          "publisher": "Spring",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.platform.vercel-ai-sdk-mcp",
      "title": "Vercel AI SDK MCP client integration profile",
      "summary": "Official-source facts for connecting AI SDK applications to MCP tools, resources, prompts, transports, schemas, and OAuth providers.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "vercel-ai-sdk-mcp",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T01:00:00Z",
      "contentHash": "sha256:08ff2ff599430b20debc530d9e513e5b84c35f5a7d8820a46c45543eec05e120",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T01:00:00Z"
      },
      "jsonPath": "/resources/platform-integration/vercel-ai-sdk-mcp.json",
      "htmlPath": "/resources/view/platform-integration/vercel-ai-sdk-mcp",
      "facts": [
        {
          "id": "fact.vercel.ai-sdk-mcp.capabilities",
          "statement": "The AI SDK MCP client can discover tools and can list or read MCP resources and prompts through the documented client methods.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vercel.ai-sdk-mcp"
          ]
        },
        {
          "id": "fact.vercel.ai-sdk-mcp.transport",
          "statement": "The documentation recommends HTTP transport for production and treats stdio as a local-development transport.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vercel.ai-sdk-mcp"
          ]
        },
        {
          "id": "fact.vercel.ai-sdk-mcp.lifecycle",
          "statement": "Applications should close short-lived MCP clients after use and may supply explicit schemas when they need compile-time control instead of dynamic discovery.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vercel.ai-sdk-mcp"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.vercel.ai-sdk-mcp",
          "url": "https://ai-sdk.dev/docs/ai-sdk-core/mcp-tools",
          "title": "AI SDK Core: Model Context Protocol",
          "publisher": "Vercel",
          "observedAt": "2026-08-27T01:00:00Z"
        }
      ]
    },
    {
      "id": "resource.platform.vllm-tool-calling",
      "title": "vLLM tool-calling server boundary",
      "summary": "Official-source capability, execution, authorization, and deployment boundaries for vLLM tool-calling server.",
      "category": "platform-integration",
      "resourceCategory": "platform-integration",
      "slug": "vllm-tool-calling",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T09:25:24Z",
      "contentHash": "sha256:447f50428bba4e6a29de93ea283d759ec363c48dec401054f4496243e7a0129e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T09:25:24Z"
      },
      "jsonPath": "/resources/platform-integration/vllm-tool-calling.json",
      "htmlPath": "/resources/view/platform-integration/vllm-tool-calling",
      "facts": [
        {
          "id": "fact.vllm.tool-calling.capability",
          "statement": "vLLM documents named and automatic tool calling through its OpenAI-compatible Chat Completions server for supported models and parsers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vllm.tool-calling"
          ]
        },
        {
          "id": "fact.vllm.tool-calling.execution",
          "statement": "The server emits tool-call arguments, while the client is responsible for executing tools, returning results, and enforcing application policy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vllm.tool-calling"
          ]
        },
        {
          "id": "fact.vllm.tool-calling.authorization",
          "statement": "Server startup flags, model templates, parser selection, API authentication, tool credentials, and network controls must be configured independently.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vllm.tool-calling"
          ]
        },
        {
          "id": "fact.vllm.tool-calling.boundary",
          "statement": "Tool-call syntax support does not prove a model follows schemas reliably, a server is secured, an external action occurred, or a production endpoint exists.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vllm.tool-calling"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.vllm.tool-calling",
          "url": "https://docs.vllm.ai/en/latest/features/tool_calling/",
          "title": "vLLM Tool Calling",
          "publisher": "vLLM Project",
          "observedAt": "2026-08-28T09:25:24Z"
        }
      ]
    },
    {
      "id": "resource.public-data.airnow-api",
      "title": "AirNow API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for AirNow API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "airnow-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:5452496cae9672c72ed9a1ef02cb26e77aa758887d39c0c006c0ad489e3458d9",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/airnow-api.json",
      "htmlPath": "/resources/view/public-data-apis/airnow-api",
      "facts": [
        {
          "id": "fact.epa.airnow-api.access",
          "statement": "AirNow web services expose current observations, forecasts, reporting areas, and historical files for air-quality index and pollutant information.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.airnow-api"
          ]
        },
        {
          "id": "fact.epa.airnow-api.authentication",
          "statement": "Requests use a registered API key that must remain outside public artifacts; access does not grant monitor operation, forecast publication, emergency, or regulatory authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.airnow-api"
          ]
        },
        {
          "id": "fact.epa.airnow-api.request",
          "statement": "Clients must bind geographic or station scope, distance, date and time, pollutant, format, and documented request limits and distinguish observation from forecast products.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.airnow-api"
          ]
        },
        {
          "id": "fact.epa.airnow-api.boundary",
          "statement": "AirNow data can be preliminary, spatially sparse, revised, or unsuitable for regulatory determination and does not replace local health advice, emergency alerts, or certified monitoring records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.airnow-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.epa.airnow-api",
          "url": "https://docs.airnowapi.org/",
          "title": "AirNow API web services documentation",
          "publisher": "U.S. Environmental Protection Agency",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.alphafold-api",
      "title": "AlphaFold Protein Structure Database API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for AlphaFold Protein Structure Database API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "alphafold-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:be48a45e9a67e49906f341f0bbd34dd61bfce1c9fdc7ccd376377fbf79179ab3",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/alphafold-api.json",
      "htmlPath": "/resources/view/public-data-apis/alphafold-api",
      "facts": [
        {
          "id": "fact.ebi.alphafold-api.access",
          "statement": "The AlphaFold DB API exposes predicted protein-structure metadata and downloadable coordinate, confidence, and related files keyed by supported protein accessions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.alphafold-api"
          ]
        },
        {
          "id": "fact.ebi.alphafold-api.authentication",
          "statement": "Public reads require no user credential and do not grant model training, database curation, protein submission, experimental, medical, or commercial endorsement authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.alphafold-api"
          ]
        },
        {
          "id": "fact.ebi.alphafold-api.request",
          "statement": "Clients must bind the supported accession, inspect model and sequence metadata, retrieve documented files, validate confidence fields, and handle absent or revised predictions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.alphafold-api"
          ]
        },
        {
          "id": "fact.ebi.alphafold-api.boundary",
          "statement": "Predicted structures have confidence, disorder, complex, ligand, conformational, and biological-context limits and do not substitute for experimental structure or prove function or druggability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.alphafold-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.alphafold-api",
          "url": "https://alphafold.ebi.ac.uk/api-docs",
          "title": "AlphaFold DB API documentation",
          "publisher": "EMBL-EBI and Google DeepMind",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.arin-whois-rws",
      "title": "ARIN Whois-RWS API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for ARIN Whois-RWS API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "arin-whois-rws",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:acc4d6960415a615b9d4f777ddea8cbd9c2edfc3ba8d4beab1bbab00270faae9",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/arin-whois-rws.json",
      "htmlPath": "/resources/view/public-data-apis/arin-whois-rws",
      "facts": [
        {
          "id": "fact.arin.whois.rws.access",
          "statement": "American Registry for Internet Numbers documents ARIN registration records for networks, ASNs, organizations, points of contact, and customers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arin.whois.rws"
          ]
        },
        {
          "id": "fact.arin.whois.rws.authentication",
          "statement": "Public reads do not grant registry updates, resource ownership, routing, identity, reassignment, or ARIN authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arin.whois.rws"
          ]
        },
        {
          "id": "fact.arin.whois.rws.request",
          "statement": "Clients must bind resource type, handle, IP address or CIDR, ASN, organization, representation, paging, and referral handling.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arin.whois.rws"
          ]
        },
        {
          "id": "fact.arin.whois.rws.boundary",
          "statement": "Registry records can be referred, redacted, historical, or contact-supplied and do not prove current control, identity, routing intent, or security.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arin.whois.rws"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.arin.whois.rws",
          "url": "https://www.arin.net/resources/registry/whois/rws/api/",
          "title": "ARIN Whois-RWS API documentation",
          "publisher": "American Registry for Internet Numbers",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.art-institute-chicago-api",
      "title": "Art Institute of Chicago API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Art Institute of Chicago API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "art-institute-chicago-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-23T05:46:25Z",
      "contentHash": "sha256:6bf22429dea41abe87d80354fb03d4c7d1a5ed52bd4aa5848b1571643dac9872",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-30T05:46:25Z"
      },
      "jsonPath": "/resources/public-data-apis/art-institute-chicago-api.json",
      "htmlPath": "/resources/view/public-data-apis/art-institute-chicago-api",
      "facts": [
        {
          "id": "fact.artic.collection-api.access",
          "statement": "Art Institute of Chicago documentation describes its API as a JSON-formatted REST-style service for public data. It documents artwork listing and detail examples plus artworks, artists, exhibitions, agents, places, galleries, images, and collection metadata; this does not establish complete collection coverage, current record accuracy, or museum authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.artic.collection-api"
          ]
        },
        {
          "id": "fact.artic.collection-api.authentication",
          "statement": "The documentation says anonymous users are throttled to 60 requests per minute per IP. This review does not establish a credential or account contract, write capability, user-agent compliance, or permission to assert image rights, attribution, ownership, exhibition, or museum-representation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.artic.collection-api"
          ]
        },
        {
          "id": "fact.artic.collection-api.request",
          "statement": "Documentation says listing and search endpoints paginate, default to 12 records, use page with a default of 1, cap limit at 100, and cannot return more than 10,000 records from one search query. The fields parameter requests named fields. This review does not establish a complete route, filter, include, query, rate-limit, or observed-service-behavior contract.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.artic.collection-api"
          ]
        },
        {
          "id": "fact.artic.collection-api.boundary",
          "statement": "The documentation says the API does not contain image files and exposes metadata for a separate IIIF Image API. An image can be unpublished or replaced; copyright is deferred to the publisher's licensing and terms pages, and the user must determine permissions. This reviewed documentation does not grant Kallipolis or an Agent permission to query records or images, fetch or download media, assume public-domain status, or reuse any asset.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.artic.collection-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.artic.collection-api",
          "url": "https://api.artic.edu/docs/",
          "title": "Art Institute of Chicago API documentation",
          "publisher": "Art Institute of Chicago",
          "observedAt": "2026-09-23T05:46:25Z"
        }
      ]
    },
    {
      "id": "resource.public-data.arxiv-api",
      "title": "arXiv API boundary",
      "summary": "Official access and manual guidance for Atom responses, query filtering, paging, pacing and versioned identifiers. This documentation review does not verify executed API access, authentication guarantees, scientific validity or reuse permissions.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "arxiv-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T18:56:42.851Z",
      "contentHash": "sha256:da23653f732bb2a8ebcfd66a79d1c2a4ed650fc34d017a64083f978d4ed0768b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T18:56:42.851Z"
      },
      "jsonPath": "/resources/public-data-apis/arxiv-api.json",
      "htmlPath": "/resources/view/public-data-apis/arxiv-api",
      "facts": [
        {
          "id": "fact.arxiv.api.access",
          "statement": "Responses, including API errors, use Atom 1.0 XML. Supplying both search_query and a comma-separated id_list filters the listed IDs by the query.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arxiv.api.manual"
          ]
        },
        {
          "id": "fact.arxiv.api.authentication",
          "statement": "The access page asks API users to review its terms and acknowledge data use. Public access does not imply arXiv endorsement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arxiv.api"
          ]
        },
        {
          "id": "fact.arxiv.api.request",
          "statement": "Paging uses zero-based start (default 0) and max_results (default 10). The manual recommends 3 seconds between consecutive calls and slices no larger than 2000, documents a 30000-result limit, and suggests narrowing queries above 1000 results. sortBy accepts relevance, lastUpdatedDate or submittedDate; sortOrder accepts ascending or descending.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arxiv.api.manual"
          ]
        },
        {
          "id": "fact.arxiv.api.boundary",
          "statement": "In id_list, an ID without a version requests the latest article version; appending vn selects version n. The manual prefers id_list over search_query=id: for article-version handling.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.arxiv.api.manual"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.arxiv.api",
          "url": "https://info.arxiv.org/help/api/index.html",
          "title": "arXiv API Access",
          "publisher": "arXiv",
          "observedAt": "2026-09-06T18:56:42.851Z"
        },
        {
          "id": "source.arxiv.api.manual",
          "url": "https://info.arxiv.org/help/api/user-manual.html",
          "title": "arXiv API User's Manual",
          "publisher": "arXiv",
          "observedAt": "2026-09-06T18:57:14.660Z"
        }
      ]
    },
    {
      "id": "resource.public-data.australia-ckan-api",
      "title": "data.gov.au CKAN API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for data.gov.au CKAN API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "australia-ckan-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:b847dfd0ce32e8bcfaedbabe305b007b8bccef97d1240ae2398f2b3f1f4caf04",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/australia-ckan-api.json",
      "htmlPath": "/resources/view/public-data-apis/australia-ckan-api",
      "facts": [
        {
          "id": "fact.australia.ckan-api.access",
          "statement": "Australian Government documents Australian government catalog packages, organizations, groups, tags, resources, and search results.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.australia.ckan-api"
          ]
        },
        {
          "id": "fact.australia.ckan-api.authentication",
          "statement": "Public reads are separate from authenticated catalog writes and do not grant publisher, source-system, licensing, or Australian-government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.australia.ckan-api"
          ]
        },
        {
          "id": "fact.australia.ckan-api.request",
          "statement": "Clients must bind CKAN action, package or organization identifier, query, filters, rows, start, and resource URL.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.australia.ckan-api"
          ]
        },
        {
          "id": "fact.australia.ckan-api.boundary",
          "statement": "Catalog records come from many publishers and can be delayed, incomplete, or unavailable; discovery does not prove dataset quality, legal reuse, or endorsement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.australia.ckan-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.australia.ckan-api",
          "url": "https://data.gov.au/data/api/1",
          "title": "data.gov.au CKAN API documentation",
          "publisher": "Australian Government",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.australian-bureau-statistics-data-api",
      "title": "Australian Bureau of Statistics Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Australian Bureau of Statistics Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "australian-bureau-statistics-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:549d240579183a850edf37218b1d9e948e4c9b98999aeae5f872d7d2c3c44ad1",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/australian-bureau-statistics-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/australian-bureau-statistics-data-api",
      "facts": [
        {
          "id": "fact.abs.data-api.access",
          "statement": "The ABS Data API provides machine-readable access to published Australian statistics and structures through an SDMX-based data service.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.abs.data-api"
          ]
        },
        {
          "id": "fact.abs.data-api.authentication",
          "statement": "Public statistical reads do not create an ABS account, subscription, endorsement, confidential-data entitlement, or authority to change published statistics.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.abs.data-api"
          ]
        },
        {
          "id": "fact.abs.data-api.request",
          "statement": "Clients must identify dataflow, dimensions, keys, time range, detail, and response format and use structures and codelists before interpreting observations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.abs.data-api"
          ]
        },
        {
          "id": "fact.abs.data-api.boundary",
          "statement": "ABS statistics can be revised, sampled, seasonally adjusted, confidentialised, or definition-dependent and do not prove individual conditions or cross-series comparability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.abs.data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.abs.data-api",
          "url": "https://www.abs.gov.au/statistics/application-programming-interfaces-apis",
          "title": "ABS Application Programming Interfaces",
          "publisher": "Australian Bureau of Statistics",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.aviation-weather-data-api",
      "title": "AviationWeather.gov Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for AviationWeather.gov Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "aviation-weather-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:8832a3bf166019e46b7310afe14f370d94c96743a874c4c34904061b9191b8ca",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/aviation-weather-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/aviation-weather-data-api",
      "facts": [
        {
          "id": "fact.aviation.weather.data.api.access",
          "statement": "National Oceanic and Atmospheric Administration documents aviation observations, forecasts, advisories, SIGMETs, METARs, TAFs, station information, and related products.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aviation.weather.data.api"
          ]
        },
        {
          "id": "fact.aviation.weather.data.api.authentication",
          "statement": "Public reads do not grant observation, forecast, flight-dispatch, air-traffic, warning, pilot, or NOAA authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aviation.weather.data.api"
          ]
        },
        {
          "id": "fact.aviation.weather.data.api.request",
          "statement": "Clients must bind data type, station or region, time window, hazard, level, bounding box, representation, and result limit.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aviation.weather.data.api"
          ]
        },
        {
          "id": "fact.aviation.weather.data.api.boundary",
          "statement": "Aviation products can be delayed, amended, incomplete, or time-critical and do not replace official briefing, operational judgment, or flight-safety procedures.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.aviation.weather.data.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.aviation.weather.data.api",
          "url": "https://aviationweather.gov/data/api/",
          "title": "AviationWeather.gov Data API documentation",
          "publisher": "National Oceanic and Atmospheric Administration",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.bank-of-canada-valet-api",
      "title": "Bank of Canada Valet API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Bank of Canada Valet API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "bank-of-canada-valet-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:8d64db536ebb2ee1f2430e8b76c1fabfc3ae5d26437ff19edd39c000998158d4",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/bank-of-canada-valet-api.json",
      "htmlPath": "/resources/view/public-data-apis/bank-of-canada-valet-api",
      "facts": [
        {
          "id": "fact.bank.of.canada.valet.api.access",
          "statement": "Bank of Canada documents financial series, groups, observations, exchange rates, and supporting metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bank.of.canada.valet.api"
          ]
        },
        {
          "id": "fact.bank.of.canada.valet.api.authentication",
          "statement": "Public reads do not grant rate publication, policy, trading, payment, account, or Bank of Canada authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bank.of.canada.valet.api"
          ]
        },
        {
          "id": "fact.bank.of.canada.valet.api.request",
          "statement": "Clients must bind series or group code, date range, recent observation count, ordering, representation, and response detail.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bank.of.canada.valet.api"
          ]
        },
        {
          "id": "fact.bank.of.canada.valet.api.boundary",
          "statement": "Published observations can be revised, rounded, delayed, or methodology-dependent and do not prove a tradable price, forecast, entitlement, or transaction outcome.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bank.of.canada.valet.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.bank.of.canada.valet.api",
          "url": "https://www.bankofcanada.ca/valet/docs",
          "title": "Bank of Canada Valet API documentation",
          "publisher": "Bank of Canada",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.banque-france-webstat-api",
      "title": "Banque de France Webstat API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Banque de France Webstat API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "banque-france-webstat-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:5d66830474a0274f2d5c0390bfadce05de91b605e4fc9a6a4510c04bce69cca2",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/banque-france-webstat-api.json",
      "htmlPath": "/resources/view/public-data-apis/banque-france-webstat-api",
      "facts": [
        {
          "id": "fact.banque.france.webstat.api.access",
          "statement": "Banque de France documents Webstat statistical datasets, series, dimensions, observations, metadata, and SDMX access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.banque.france.webstat.api"
          ]
        },
        {
          "id": "fact.banque.france.webstat.api.authentication",
          "statement": "Public or credentialed reads do not grant statistical publication, policy, reporting, account, trading, or Banque de France authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.banque.france.webstat.api"
          ]
        },
        {
          "id": "fact.banque.france.webstat.api.request",
          "statement": "Clients must bind dataset, series key, dimensions, date range, format, detail, pagination, and access token when required.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.banque.france.webstat.api"
          ]
        },
        {
          "id": "fact.banque.france.webstat.api.boundary",
          "statement": "Statistical observations can be revised, seasonal, estimated, confidentially filtered, or methodology-dependent and do not prove a forecast or transaction value.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.banque.france.webstat.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.banque.france.webstat.api",
          "url": "https://webstat.banque-france.fr/en/pages/api/",
          "title": "Banque de France Webstat API documentation",
          "publisher": "Banque de France",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.bea-data-api",
      "title": "U.S. BEA Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for U.S. BEA Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "bea-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:0d11f0e67b88f6fe64316a3d3bf5582bdef532bc190ebd6a0ce9e41bc83c60ab",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/bea-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/bea-data-api",
      "facts": [
        {
          "id": "fact.bea.data-api.access",
          "statement": "The BEA Data API provides programmatic access to published national, regional, industry, international, investment, and fixed-asset statistics and metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bea.data-api"
          ]
        },
        {
          "id": "fact.bea.data-api.authentication",
          "statement": "Use requires registration and a user key, which is a credential and must not be stored in a public resource record.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bea.data-api"
          ]
        },
        {
          "id": "fact.bea.data-api.request",
          "statement": "Dataset name, method, parameter values, result format, and dataset-specific dimensions must be discovered before requesting statistical values.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bea.data-api"
          ]
        },
        {
          "id": "fact.bea.data-api.boundary",
          "statement": "BEA estimates can be revised and are scoped to published methodologies; API success does not prove permanence, completeness, or a policy or investment conclusion.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bea.data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.bea.data-api",
          "url": "https://apps.bea.gov/api/signup/",
          "title": "BEA Data API",
          "publisher": "U.S. Bureau of Economic Analysis",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.biomodels-api",
      "title": "BioModels API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for BioModels API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "biomodels-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:df95782675799073e6adf195e0b9bcafafea05097d45d19612be9441ca523550",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/biomodels-api.json",
      "htmlPath": "/resources/view/public-data-apis/biomodels-api",
      "facts": [
        {
          "id": "fact.ebi.biomodels-api.access",
          "statement": "BioModels APIs provide search, metadata, files, models, formats, publications, and status information for curated and non-curated computational biology models.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biomodels-api"
          ]
        },
        {
          "id": "fact.ebi.biomodels-api.authentication",
          "statement": "Public reads are separate from authenticated submission and curation workflows; access does not grant model ownership, publication, validation, or clinical authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biomodels-api"
          ]
        },
        {
          "id": "fact.ebi.biomodels-api.request",
          "statement": "Clients must bind model identifier, query, status, format, file, fields, sort, and paging and distinguish curated, non-curated, published, and deprecated records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biomodels-api"
          ]
        },
        {
          "id": "fact.ebi.biomodels-api.boundary",
          "statement": "A deposited model can depend on assumptions, parameters, software, missing files, and biological context and does not prove reproducibility, predictive validity, or clinical usefulness.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biomodels-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.biomodels-api",
          "url": "https://www.ebi.ac.uk/biomodels/docs/",
          "title": "BioModels documentation and API",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.biosamples-api",
      "title": "BioSamples API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for BioSamples API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "biosamples-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:e776eeef14200c28158a3a7f5c1b176c96a7485e6350fcea9f2a8cdca7238bcc",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/biosamples-api.json",
      "htmlPath": "/resources/view/public-data-apis/biosamples-api",
      "facts": [
        {
          "id": "fact.ebi.biosamples-api.access",
          "statement": "The BioSamples REST API exposes public sample records, attributes, relationships, external references, collections, and hypermedia links in supported representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biosamples-api"
          ]
        },
        {
          "id": "fact.ebi.biosamples-api.authentication",
          "statement": "Public retrieval is separate from authenticated submission and update operations; credentials and private sample access must not be embedded in public artifacts.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biosamples-api"
          ]
        },
        {
          "id": "fact.ebi.biosamples-api.request",
          "statement": "Clients must follow returned hypermedia links, content negotiation, identifiers, filters, cursor paging, HTTP status semantics, and documented authentication only for authorized writes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biosamples-api"
          ]
        },
        {
          "id": "fact.ebi.biosamples-api.boundary",
          "statement": "Sample metadata is submitter-provided and can be incomplete, updated, linked, or inconsistently standardized and does not prove sample identity, consent, provenance, or experimental quality.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biosamples-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.biosamples-api",
          "url": "https://www.ebi.ac.uk/biosamples/docs/references/api/overview",
          "title": "BioSamples API overview",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.biostudies-api",
      "title": "BioStudies API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for BioStudies API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "biostudies-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:e52a792550a2e126d955d662336d12e0d929ce75a88b0e89676c9da3368a0b55",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/biostudies-api.json",
      "htmlPath": "/resources/view/public-data-apis/biostudies-api",
      "facts": [
        {
          "id": "fact.ebi.biostudies-api.access",
          "statement": "BioStudies APIs provide public discovery and retrieval of studies, files, links, sections, collections, and supporting metadata across archived biological datasets.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biostudies-api"
          ]
        },
        {
          "id": "fact.ebi.biostudies-api.authentication",
          "statement": "Public reads are separate from authenticated submission, update, and private-review workflows; account tokens must remain outside public records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biostudies-api"
          ]
        },
        {
          "id": "fact.ebi.biostudies-api.request",
          "statement": "Clients must bind accession or search terms, collection, fields, paging, file paths, and representation and follow archive download and access-state guidance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biostudies-api"
          ]
        },
        {
          "id": "fact.ebi.biostudies-api.boundary",
          "statement": "Study packages and files are submitter-provided and can be revised, withdrawn, incomplete, restricted, or heterogeneous and do not prove reproducibility, consent, or scientific validity.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.biostudies-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.biostudies-api",
          "url": "https://www.ebi.ac.uk/biostudies/help#api",
          "title": "BioStudies API help",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.bis-statistics-sdmx-api",
      "title": "BIS Statistics SDMX API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for BIS Statistics SDMX API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "bis-statistics-sdmx-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:164eabc0c22b2c87ec84afefd6e51e5e41c31436a6ad96b16bc669cf47b1d865",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/bis-statistics-sdmx-api.json",
      "htmlPath": "/resources/view/public-data-apis/bis-statistics-sdmx-api",
      "facts": [
        {
          "id": "fact.bis.statistics-sdmx-api.access",
          "statement": "The BIS SDMX RESTful API exposes public statistical data and metadata through a documented subset of the SDMX REST specification.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bis.statistics-sdmx-api"
          ]
        },
        {
          "id": "fact.bis.statistics-sdmx-api.authentication",
          "statement": "Version 2 uses different endpoints from the prior service, so clients must bind the API version and not assume old routes or response shapes remain compatible.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bis.statistics-sdmx-api"
          ]
        },
        {
          "id": "fact.bis.statistics-sdmx-api.request",
          "statement": "Data, availability, schema, structure, and reference-metadata routes require explicit context, agency, resource, version, key, and representation choices.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bis.statistics-sdmx-api"
          ]
        },
        {
          "id": "fact.bis.statistics-sdmx-api.boundary",
          "statement": "BIS statistics and APIs are provided as-is and do not guarantee accuracy, completeness, fitness, continuity, or investment suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bis.statistics-sdmx-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.bis.statistics-sdmx-api",
          "url": "https://stats.bis.org/api-doc/v2/",
          "title": "BIS SDMX RESTful API",
          "publisher": "Bank for International Settlements",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.bls-public-data-api",
      "title": "U.S. BLS Public Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for U.S. BLS Public Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "bls-public-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:8a6e68d6454cb715d72f638fe9e6ffb3cab12a4a74fce9abd1af90400e2b8426",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/bls-public-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/bls-public-data-api",
      "facts": [
        {
          "id": "fact.bls.public-data-api.access",
          "statement": "The BLS Public Data API exposes published labor and economic time series through HTTPS GET and POST operations with JSON or XLSX output.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bls.public-data-api"
          ]
        },
        {
          "id": "fact.bls.public-data-api.authentication",
          "statement": "Version 1 offers limited public use without registration, while version 2 registration permits larger or more frequent requests and optional calculations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bls.public-data-api"
          ]
        },
        {
          "id": "fact.bls.public-data-api.request",
          "statement": "Series identifiers, year ranges, series-count limits, request quotas, and preliminary-data footnotes are part of the response interpretation boundary.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bls.public-data-api"
          ]
        },
        {
          "id": "fact.bls.public-data-api.boundary",
          "statement": "A successful time-series request does not prove revision stability, seasonal-adjustment comparability, complete metadata, or suitability for financial decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bls.public-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.bls.public-data-api",
          "url": "https://www.bls.gov/developers/",
          "title": "BLS Public Data API Getting Started",
          "publisher": "U.S. Bureau of Labor Statistics",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.bold-systems-api",
      "title": "BOLD Systems data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for BOLD Systems data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "bold-systems-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:d31e5623640c999e24e9fa59b4b1c2a537f16ae2455639747b6261616dfe0d29",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/bold-systems-api.json",
      "htmlPath": "/resources/view/public-data-apis/bold-systems-api",
      "facts": [
        {
          "id": "fact.bold.systems.api.access",
          "statement": "BOLD Systems documents barcode sequence, specimen, taxonomy, institution, geography, and dataset records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bold.systems.api"
          ]
        },
        {
          "id": "fact.bold.systems.api.authentication",
          "statement": "Public reads do not grant specimen, sequence, dataset, taxonomic, collection, submission, or BOLD editorial authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bold.systems.api"
          ]
        },
        {
          "id": "fact.bold.systems.api.request",
          "statement": "Clients must bind endpoint, taxon, process or specimen identifier, institution, geography, marker, format, and result size.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bold.systems.api"
          ]
        },
        {
          "id": "fact.bold.systems.api.boundary",
          "statement": "Barcode and specimen records can be provisional, misidentified, incomplete, embargoed, or revised and do not alone prove species identity, provenance, or legal collection.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.bold.systems.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.bold.systems.api",
          "url": "https://www.boldsystems.org/index.php/resources/api",
          "title": "BOLD Systems data API documentation",
          "publisher": "BOLD Systems",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.catalogue-of-life-api",
      "title": "Catalogue of Life API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Catalogue of Life API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "catalogue-of-life-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:b017e85943a0fdcc8af8d514a33026f0b6778a2b93159ab07641ffbf4919d8cd",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/catalogue-of-life-api.json",
      "htmlPath": "/resources/view/public-data-apis/catalogue-of-life-api",
      "facts": [
        {
          "id": "fact.catalogue-of-life.api.access",
          "statement": "Catalogue of Life documents taxonomic datasets, names, usages, classifications, sectors, releases, and project metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.catalogue-of-life.api"
          ]
        },
        {
          "id": "fact.catalogue-of-life.api.authentication",
          "statement": "Public reads are separate from authenticated editorial and publishing operations and do not grant taxonomic, nomenclatural, or dataset-owner authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.catalogue-of-life.api"
          ]
        },
        {
          "id": "fact.catalogue-of-life.api.request",
          "statement": "Clients must bind dataset key, taxon or name identifier, rank, status, classification, release, fields, limit, and offset.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.catalogue-of-life.api"
          ]
        },
        {
          "id": "fact.catalogue-of-life.api.boundary",
          "statement": "Checklist concepts can conflict, be provisional, change by release, or differ by source and do not prove organism identity or universal consensus.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.catalogue-of-life.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.catalogue-of-life.api",
          "url": "https://api.catalogueoflife.org/",
          "title": "Catalogue of Life API documentation",
          "publisher": "Catalogue of Life",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.cdc-socrata-open-data-api",
      "title": "CDC Socrata Open Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for CDC Socrata Open Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "cdc-socrata-open-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:855cec58e6f63f8fcabe0dfafd39df95d50db23822a2ce8ae44b4a79085c7bd6",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/cdc-socrata-open-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/cdc-socrata-open-data-api",
      "facts": [
        {
          "id": "fact.cdc.socrata-api.access",
          "statement": "Data.CDC.gov exposes public datasets through Socrata endpoints with JSON, GeoJSON, XML, or CSV representations and SoQL filtering.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cdc.socrata-api"
          ]
        },
        {
          "id": "fact.cdc.socrata-api.authentication",
          "statement": "Limited unauthenticated requests may work, but applications should use a distinct app token and obey the platform's throttling rules.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cdc.socrata-api"
          ]
        },
        {
          "id": "fact.cdc.socrata-api.request",
          "statement": "Dataset identifiers, fields, paging, and query syntax are specific to each asset and must be discovered from its metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cdc.socrata-api"
          ]
        },
        {
          "id": "fact.cdc.socrata-api.boundary",
          "statement": "A public health dataset response is not clinical advice and does not prove current reporting, full population coverage, causal interpretation, or cross-dataset comparability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cdc.socrata-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cdc.socrata-api",
          "url": "https://dev.socrata.com/foundry/data.cdc.gov/5xkq-dg7x",
          "title": "Data.CDC.gov Socrata API Foundry",
          "publisher": "U.S. Centers for Disease Control and Prevention",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.census-geocoder-api",
      "title": "U.S. Census Geocoder API boundary",
      "summary": "Official documentation boundaries for Census Geocoder request planning, conditional geography parameters, approximate results and unresolved batch-coordinate guidance; not permission to transmit sensitive location data.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "census-geocoder-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-28T02:32:32.065Z",
      "contentHash": "sha256:02bc88fb5c3ca7847120e2b076bd88d8571340bba8e85fb21a3d0d90d72e381a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-10-05T02:32:32.065Z"
      },
      "jsonPath": "/resources/public-data-apis/census-geocoder-api.json",
      "htmlPath": "/resources/view/public-data-apis/census-geocoder-api",
      "facts": [
        {
          "id": "fact.census.geocoder-api.access",
          "statement": "The documented service calculates address locations for the United States, Puerto Rico and U.S. Island Areas. Coordinate input returns geographic-area matches, not a reverse-geocoded address, and requires geographies returntype.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.geocoder-api"
          ]
        },
        {
          "id": "fact.census.geocoder-api.authentication",
          "statement": "The guide lists no API-key parameter; authenticated behavior and operational limits were not tested. This metadata record grants no permission to transmit personal addresses or coordinates.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.geocoder-api"
          ]
        },
        {
          "id": "fact.census.geocoder-api.request",
          "statement": "Select the documented searchtype and benchmark; vintage is required only for geographies, with a matching spatial benchmark. Single-request format and layers are optional. Coordinates use x=longitude and y=latitude. Current benchmark and vintage labels change over time.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.geocoder-api"
          ]
        },
        {
          "id": "fact.census.geocoder-api.boundary",
          "statement": "Calculated address-range positions are not verified occupancy, identity, deliverability or current ground truth. Available geographic layers depend on vintage and coverage; a successful response does not establish complete coverage or reuse permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.geocoder-api"
          ]
        },
        {
          "id": "fact.census.geocoder-api.batch",
          "statement": "The guide limits batch files to 10,000 records but contains conflicting batch-coordinate guidance: the address-batch section excludes independent coordinate lookup while a later section documents coordinatesbatch. Runtime availability remains unverified; no batch submission was made.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.geocoder-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.census.geocoder-api",
          "url": "https://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.html",
          "title": "Geocoding Services API",
          "publisher": "U.S. Census Bureau",
          "observedAt": "2026-09-28T02:32:32.065Z"
        }
      ]
    },
    {
      "id": "resource.public-data.census-tigerweb-rest",
      "title": "Census TIGERweb REST-services boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Census TIGERweb REST-services.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "census-tigerweb-rest",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:2e3d1d7bc8713231c686bd4ec60372ecff56c69d8ab45e1347e031299c78ad69",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/census-tigerweb-rest.json",
      "htmlPath": "/resources/view/public-data-apis/census-tigerweb-rest",
      "facts": [
        {
          "id": "fact.census.tigerweb.rest.access",
          "statement": "U.S. Census Bureau documents TIGERweb map and feature services for Census geographies, boundaries, labels, and attributes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.tigerweb.rest"
          ]
        },
        {
          "id": "fact.census.tigerweb.rest.authentication",
          "statement": "Public reads do not grant boundary editing, address assignment, enumeration, geocoding, legal-jurisdiction, or Census authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.tigerweb.rest"
          ]
        },
        {
          "id": "fact.census.tigerweb.rest.request",
          "statement": "Clients must bind map service and layer, geometry, spatial relation, geography vintage, fields, coordinate system, paging, and format.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.tigerweb.rest"
          ]
        },
        {
          "id": "fact.census.tigerweb.rest.boundary",
          "statement": "Census boundaries and attributes have vintage, scale, topology, and legal-status limits and do not prove current address, jurisdiction, ownership, or eligibility.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.tigerweb.rest"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.census.tigerweb.rest",
          "url": "https://tigerweb.geo.census.gov/tigerwebmain/TIGERweb_restmapservice.html",
          "title": "Census TIGERweb REST-services documentation",
          "publisher": "U.S. Census Bureau",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.cfpb-consumer-complaint-api",
      "title": "CFPB Consumer Complaint Database API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for CFPB Consumer Complaint Database API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "cfpb-consumer-complaint-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:7d1705a97779e05c9d79f9b4718b0a3fa3f58e0ab35e22a59e2d0ee97566127c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/cfpb-consumer-complaint-api.json",
      "htmlPath": "/resources/view/public-data-apis/cfpb-consumer-complaint-api",
      "facts": [
        {
          "id": "fact.cfpb.complaint-api.access",
          "statement": "Consumer Financial Protection Bureau documents published consumer-complaint narratives and product, company, issue, geography, response, and date fields.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cfpb.complaint-api"
          ]
        },
        {
          "id": "fact.cfpb.complaint-api.authentication",
          "statement": "Public retrieval does not grant complaint submission, consumer identity, company response, adjudication, enforcement, or CFPB authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cfpb.complaint-api"
          ]
        },
        {
          "id": "fact.cfpb.complaint-api.request",
          "statement": "Clients must bind search text, product, issue, company, geography, date, field, aggregation, sort, size, and pagination.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cfpb.complaint-api"
          ]
        },
        {
          "id": "fact.cfpb.complaint-api.boundary",
          "statement": "Complaints are consumer allegations with privacy processing and response statuses; they do not prove wrongdoing, representativeness, damages, or legal findings.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cfpb.complaint-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cfpb.complaint-api",
          "url": "https://cfpb.github.io/api/ccdb/",
          "title": "CFPB Consumer Complaint Database API documentation",
          "publisher": "Consumer Financial Protection Bureau",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.cfpb-hmda-api",
      "title": "CFPB HMDA data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for CFPB HMDA data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "cfpb-hmda-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:33f94043e8dbb780be4162072c3c44204f471b8f5ecfaf75fe11cfd6d8b949a0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/cfpb-hmda-api.json",
      "htmlPath": "/resources/view/public-data-apis/cfpb-hmda-api",
      "facts": [
        {
          "id": "fact.cfpb.hmda-api.access",
          "statement": "The official HMDA platform provides public mortgage-market datasets, institution metadata, aggregate products, and Data Browser API access for filterable loan-level disclosures.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cfpb.hmda-api"
          ]
        },
        {
          "id": "fact.cfpb.hmda-api.authentication",
          "statement": "Public data retrieval does not require filer credentials and does not grant filing-platform, lender-account, correction, supervisory, or disclosure-policy authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cfpb.hmda-api"
          ]
        },
        {
          "id": "fact.cfpb.hmda-api.request",
          "statement": "Clients must bind data year, geography, institution identifiers, available public fields, filters, and export shape and must account for files too large for common spreadsheet tools.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cfpb.hmda-api"
          ]
        },
        {
          "id": "fact.cfpb.hmda-api.boundary",
          "statement": "HMDA data is reported and disclosure-modified under statutory rules; it can contain revisions and cannot alone establish discrimination, underwriting correctness, borrower identity, or legal liability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cfpb.hmda-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cfpb.hmda-api",
          "url": "https://ffiec.cfpb.gov/",
          "title": "HMDA data and API documentation hub",
          "publisher": "Consumer Financial Protection Bureau",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.chebi-api",
      "title": "ChEBI API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for ChEBI API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "chebi-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:dae9facf50f5d7d8746c8793d010aa64b0a4f2d31bdebd993790bd50c2685e77",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/chebi-api.json",
      "htmlPath": "/resources/view/public-data-apis/chebi-api",
      "facts": [
        {
          "id": "fact.ebi.chebi-api.access",
          "statement": "ChEBI REST APIs provide public JSON access to chemical entities, ontology relationships, names, identifiers, formulae, structures, and keyword or advanced searches.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.chebi-api"
          ]
        },
        {
          "id": "fact.ebi.chebi-api.authentication",
          "statement": "Public API access requires no authentication and does not grant record submission, curator, ontology-release, regulatory, or chemical-safety authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.chebi-api"
          ]
        },
        {
          "id": "fact.ebi.chebi-api.request",
          "statement": "Clients must bind entity identifiers, search mode, text or structure constraints, ontology traversal, result fields, format, and paging and retain stable ChEBI identifiers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.chebi-api"
          ]
        },
        {
          "id": "fact.ebi.chebi-api.boundary",
          "statement": "Ontology records and chemical structures can be revised, deprecated, generalized, or incomplete and do not prove sample identity, purity, safety, efficacy, regulatory status, or clinical suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.chebi-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.chebi-api",
          "url": "https://www.ebi.ac.uk/chebi/tools",
          "title": "ChEBI RESTful API tools",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.checklistbank-api",
      "title": "ChecklistBank API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for ChecklistBank API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "checklistbank-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:1edb7452e9333dd51ac43043a890cca7e124d38137fb09cab6bbcdfc2825fcac",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/checklistbank-api.json",
      "htmlPath": "/resources/view/public-data-apis/checklistbank-api",
      "facts": [
        {
          "id": "fact.gbif.checklistbank-api.access",
          "statement": "ChecklistBank APIs expose taxonomic datasets, names, usages, classifications, sectors, metrics, decisions, and dataset comparison and assembly metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gbif.checklistbank-api"
          ]
        },
        {
          "id": "fact.gbif.checklistbank-api.authentication",
          "statement": "Public discovery and reads are separate from authenticated dataset import, assembly, editorial, and publishing actions; access does not grant taxonomic authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gbif.checklistbank-api"
          ]
        },
        {
          "id": "fact.gbif.checklistbank-api.request",
          "statement": "Clients must bind dataset or project key, name or usage identifier, rank, status, classification, fields, limit, offset, and release and preserve source-dataset lineage.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gbif.checklistbank-api"
          ]
        },
        {
          "id": "fact.gbif.checklistbank-api.boundary",
          "statement": "Taxonomic concepts and synonymies can conflict, change, be provisional, or reflect different checklists and do not prove organism identity, accepted consensus, or nomenclatural act.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gbif.checklistbank-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.gbif.checklistbank-api",
          "url": "https://api.checklistbank.org/",
          "title": "ChecklistBank API documentation",
          "publisher": "Catalogue of Life and GBIF",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.chembl-api",
      "title": "ChEMBL API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for ChEMBL API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "chembl-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:bf0fbae6e140201732442d2aa77963b0fc8db1554089a6a0424af7c6e012921b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/chembl-api.json",
      "htmlPath": "/resources/view/public-data-apis/chembl-api",
      "facts": [
        {
          "id": "fact.ebi.chembl-api.access",
          "statement": "ChEMBL web services expose compounds, targets, assays, activities, mechanisms, cells, documents, indications, and supporting biomedical metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.chembl-api"
          ]
        },
        {
          "id": "fact.ebi.chembl-api.authentication",
          "statement": "Public reads require no user credential and do not grant data deposition, curation, drug approval, prescribing, or regulatory authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.chembl-api"
          ]
        },
        {
          "id": "fact.ebi.chembl-api.request",
          "statement": "Clients must bind resource type, identifiers, filters, fields, ordering, pagination, and JSON, XML, YAML, or related representations and preserve release and source-document context.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.chembl-api"
          ]
        },
        {
          "id": "fact.ebi.chembl-api.boundary",
          "statement": "Curated experimental and literature data can be heterogeneous, censored, revised, or context-specific and do not prove safety, efficacy, selectivity, causal mechanism, or clinical suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.chembl-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.chembl-api",
          "url": "https://www.ebi.ac.uk/chembl/api/data/docs",
          "title": "ChEMBL web services documentation",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.cisa-kev-catalog",
      "title": "CISA Known Exploited Vulnerabilities catalog boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for CISA Known Exploited Vulnerabilities catalog.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "cisa-kev-catalog",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:21d02ea902818da05e6f6576b5e3d54ddacb46b728ca0dad90c959b30958f42b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/cisa-kev-catalog.json",
      "htmlPath": "/resources/view/public-data-apis/cisa-kev-catalog",
      "facts": [
        {
          "id": "fact.cisa.kev-catalog.access",
          "statement": "Cybersecurity and Infrastructure Security Agency documents known-exploited CVE records, vendors, products, required actions, due dates, and machine-readable catalog files.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cisa.kev-catalog"
          ]
        },
        {
          "id": "fact.cisa.kev-catalog.authentication",
          "statement": "Public reads do not grant vulnerability, remediation, directive, asset, incident, or CISA decision authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cisa.kev-catalog"
          ]
        },
        {
          "id": "fact.cisa.kev-catalog.request",
          "statement": "Clients must bind catalog version, CVE identifier, vendor, product, date added, due date, known-ransomware field, and file representation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cisa.kev-catalog"
          ]
        },
        {
          "id": "fact.cisa.kev-catalog.boundary",
          "statement": "Catalog inclusion reflects evidence of exploitation and scoped directives; absence does not prove safety, and inclusion does not establish local exposure or exploitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cisa.kev-catalog"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cisa.kev-catalog",
          "url": "https://www.cisa.gov/known-exploited-vulnerabilities-catalog",
          "title": "CISA Known Exploited Vulnerabilities catalog documentation",
          "publisher": "Cybersecurity and Infrastructure Security Agency",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.clinicaltrials-gov-api-v2",
      "title": "ClinicalTrials.gov API v2 boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for ClinicalTrials.gov API v2.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "clinicaltrials-gov-api-v2",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:e61bde269ba2ab077d84d41cc735552572b9606bc7881fa4946e87bdc2842318",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/clinicaltrials-gov-api-v2.json",
      "htmlPath": "/resources/view/public-data-apis/clinicaltrials-gov-api-v2",
      "facts": [
        {
          "id": "fact.clinicaltrials.api-v2.access",
          "statement": "ClinicalTrials.gov publishes an OpenAPI-described REST API v2 for study search, individual study retrieval, metadata, and service-version discovery.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.clinicaltrials.api-v2"
          ]
        },
        {
          "id": "fact.clinicaltrials.api-v2.authentication",
          "statement": "Study search responses are paginated, and clients must retain the next-page token and requested fields rather than treating the first page as a complete result set.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.clinicaltrials.api-v2"
          ]
        },
        {
          "id": "fact.clinicaltrials.api-v2.request",
          "statement": "The service normally refreshes data on weekdays, and clients should inspect the version endpoint dataTimestamp before claiming a current snapshot.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.clinicaltrials.api-v2"
          ]
        },
        {
          "id": "fact.clinicaltrials.api-v2.boundary",
          "statement": "A registered study record is sponsor-submitted registry information, not medical advice, peer review, proof of efficacy, or evidence that every field is complete and current.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.clinicaltrials.api-v2"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.clinicaltrials.api-v2",
          "url": "https://clinicaltrials.gov/data-about-studies/learn-about-api",
          "title": "ClinicalTrials.gov API",
          "publisher": "U.S. National Library of Medicine",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.cloudflare-dns-over-https",
      "title": "Cloudflare DNS-over-HTTPS boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Cloudflare DNS-over-HTTPS.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "cloudflare-dns-over-https",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:41428fc0e6d2f1ddf32231041bd1f5f5267c16e78a0455d0afb438b3baf71430",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/cloudflare-dns-over-https.json",
      "htmlPath": "/resources/view/public-data-apis/cloudflare-dns-over-https",
      "facts": [
        {
          "id": "fact.cloudflare.dns.over.https.access",
          "statement": "Cloudflare documents 1.1.1.1 DNS-over-HTTPS wire-format and JSON query behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cloudflare.dns.over.https"
          ]
        },
        {
          "id": "fact.cloudflare.dns.over.https.authentication",
          "statement": "Public resolution does not grant DNS-zone, domain, registrar, resolver-policy, cache, or Cloudflare administrative authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cloudflare.dns.over.https"
          ]
        },
        {
          "id": "fact.cloudflare.dns.over.https.request",
          "statement": "Clients must bind endpoint, name, type, DNS message or JSON parameters, accepted representation, cache, and response code.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cloudflare.dns.over.https"
          ]
        },
        {
          "id": "fact.cloudflare.dns.over.https.boundary",
          "statement": "DNS responses are time-dependent and resolver-specific and do not prove ownership, reachability, content safety, identity, or future resolution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cloudflare.dns.over.https"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cloudflare.dns.over.https",
          "url": "https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/",
          "title": "Cloudflare DNS-over-HTTPS documentation",
          "publisher": "Cloudflare",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.cms-data-api",
      "title": "CMS Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for CMS Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "cms-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:faf131d7aee8ec5125014346f6cf43a5f77a5a3b6342f52c8735d780e91f0184",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/cms-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/cms-data-api",
      "facts": [
        {
          "id": "fact.cms.data-api.access",
          "statement": "The CMS Data API exposes an open-data catalog and dataset-specific REST endpoints with JSON and JSON:API responses for public CMS datasets and resources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cms.data-api"
          ]
        },
        {
          "id": "fact.cms.data-api.authentication",
          "statement": "Dataset retrieval starts from the dataset unique identifier and uses dataset-specific fields rather than assuming a shared schema across the catalog.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cms.data-api"
          ]
        },
        {
          "id": "fact.cms.data-api.request",
          "statement": "Clients must bind filters, page size, and offset; one response can contain at most the documented 5,000 rows and is not a complete large dataset.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cms.data-api"
          ]
        },
        {
          "id": "fact.cms.data-api.boundary",
          "statement": "CMS public data can be aggregate, provider-reported, revised, suppressed, or program-specific and is not clinical advice or proof of payment, eligibility, or provider quality.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cms.data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cms.data-api",
          "url": "https://data.cms.gov/api-docs",
          "title": "CMS Data API Documentation",
          "publisher": "U.S. Centers for Medicare & Medicaid Services",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.college-scorecard-api",
      "title": "College Scorecard API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for College Scorecard API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "college-scorecard-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:a210f02010facab4688e863a64436dd3db5d7c858b6dcbd6306299446f6ecf7f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/college-scorecard-api.json",
      "htmlPath": "/resources/view/public-data-apis/college-scorecard-api",
      "facts": [
        {
          "id": "fact.education.college-scorecard-api.access",
          "statement": "The College Scorecard API exposes institution and field-of-study data for documented school, admissions, cost, completion, earnings, and related variables.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.education.college-scorecard-api"
          ]
        },
        {
          "id": "fact.education.college-scorecard-api.authentication",
          "statement": "Sustained access uses a data.gov API key, which is a credential and must remain outside public resource files and client-visible output.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.education.college-scorecard-api"
          ]
        },
        {
          "id": "fact.education.college-scorecard-api.request",
          "statement": "Clients must bind data version, selected fields, school or program filters, sort order, page, and per-page size and inspect metadata for pagination and variable definitions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.education.college-scorecard-api"
          ]
        },
        {
          "id": "fact.education.college-scorecard-api.boundary",
          "statement": "Scorecard data can be suppressed, modeled, cohort-specific, lagged, or revised and does not prove institutional quality, admission, affordability, employment, or individual outcomes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.education.college-scorecard-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.education.college-scorecard-api",
          "url": "https://collegescorecard.ed.gov/data/api-documentation/",
          "title": "College Scorecard API Documentation",
          "publisher": "U.S. Department of Education",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.companies-house-api",
      "title": "UK Companies House API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for UK Companies House API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "companies-house-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:9af16ee92c12f09c6542caf317baa57405df77e8b236b62f07765c5edd43b0b1",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/companies-house-api.json",
      "htmlPath": "/resources/view/public-data-apis/companies-house-api",
      "facts": [
        {
          "id": "fact.uk.companies-house-api.access",
          "statement": "The Companies House REST API exposes public company profiles, officers, filings, charges, insolvency, registers, persons with significant control, and related resources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.companies-house-api"
          ]
        },
        {
          "id": "fact.uk.companies-house-api.authentication",
          "statement": "API access requires a registered key or an applicable OAuth flow; credentials identify a client but do not grant broader company or filing authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.companies-house-api"
          ]
        },
        {
          "id": "fact.uk.companies-house-api.request",
          "statement": "Clients must bind company number or search query, endpoint, start index, items per page, and returned pagination metadata and distinguish live REST from streaming contracts.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.companies-house-api"
          ]
        },
        {
          "id": "fact.uk.companies-house-api.boundary",
          "statement": "Companies House makes filed information available but does not verify every filed fact; API data does not replace the current register, identity checks, due diligence, or legal advice.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.companies-house-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.uk.companies-house-api",
          "url": "https://developer.company-information.service.gov.uk/",
          "title": "Companies House API Developer Hub",
          "publisher": "UK Companies House",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.congress-gov-api",
      "title": "Congress.gov API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Congress.gov API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "congress-gov-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:3955854958dc473cab923c20eadd78d36f564ac63670caff98d70a192b6b3268",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/congress-gov-api.json",
      "htmlPath": "/resources/view/public-data-apis/congress-gov-api",
      "facts": [
        {
          "id": "fact.loc.congress-gov-api.access",
          "statement": "Congress.gov shares a versioned public API for machine-readable bills, amendments, laws, committees, members, nominations, treaties, and related legislative data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.loc.congress-gov-api"
          ]
        },
        {
          "id": "fact.loc.congress-gov-api.authentication",
          "statement": "Requests require a free api.data.gov key, which must remain outside public assets and be subject to the service's documented limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.loc.congress-gov-api"
          ]
        },
        {
          "id": "fact.loc.congress-gov-api.request",
          "statement": "Clients must bind congress number, resource type, identifiers, update windows, format, limit, offset, and pagination links rather than infer a complete corpus from one list.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.loc.congress-gov-api"
          ]
        },
        {
          "id": "fact.loc.congress-gov-api.boundary",
          "statement": "Legislative metadata and text can change during the legislative process and do not replace authenticated official publications, enacted-law verification, or legal advice.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.loc.congress-gov-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.loc.congress-gov-api",
          "url": "https://api.congress.gov/",
          "title": "Congress.gov API",
          "publisher": "Library of Congress",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.copernicus-data-space-apis",
      "title": "Copernicus Data Space APIs boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Copernicus Data Space APIs.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "copernicus-data-space-apis",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:db160de28719f3a91ff13e0ac56400e6c6330657fb9f8bfcb10da0f92c2e94f6",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/copernicus-data-space-apis.json",
      "htmlPath": "/resources/view/public-data-apis/copernicus-data-space-apis",
      "facts": [
        {
          "id": "fact.copernicus.data.space.apis.access",
          "statement": "European Space Agency / European Commission documents catalogue, STAC, OData, S3, openEO, Sentinel Hub, and related Earth-observation access interfaces.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.copernicus.data.space.apis"
          ]
        },
        {
          "id": "fact.copernicus.data.space.apis.authentication",
          "statement": "Interfaces have distinct authentication, quota, and license rules; reads do not grant satellite, product, processing, redistribution, or institutional authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.copernicus.data.space.apis"
          ]
        },
        {
          "id": "fact.copernicus.data.space.apis.request",
          "statement": "Clients must bind API family, collection, product, spatial and temporal filter, processing parameters, credential, quota, and representation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.copernicus.data.space.apis"
          ]
        },
        {
          "id": "fact.copernicus.data.space.apis.boundary",
          "statement": "Earth-observation products have coverage, processing, cloud, resolution, latency, quality, and rights limits and do not alone prove ground conditions or impact.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.copernicus.data.space.apis"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.copernicus.data.space.apis",
          "url": "https://documentation.dataspace.copernicus.eu/APIs.html",
          "title": "Copernicus Data Space APIs documentation",
          "publisher": "European Space Agency / European Commission",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.copernicus-data-space-odata-api",
      "title": "Copernicus Data Space OData API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Copernicus Data Space OData API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "copernicus-data-space-odata-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:3a8972d2d7ca01a7229b4277fafc85abc333349ce5399c11afbcb083622a380b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/copernicus-data-space-odata-api.json",
      "htmlPath": "/resources/view/public-data-apis/copernicus-data-space-odata-api",
      "facts": [
        {
          "id": "fact.eu.copernicus-odata-api.access",
          "statement": "The Copernicus Data Space OData API exposes Earth-observation product metadata, collections, attributes, checksums, locations, and filtered discovery over the public catalog.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.copernicus-odata-api"
          ]
        },
        {
          "id": "fact.eu.copernicus-odata-api.authentication",
          "statement": "Catalog queries can be public, while product download and protected operations can require authentication tokens that must not be stored in public resource records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.copernicus-odata-api"
          ]
        },
        {
          "id": "fact.eu.copernicus-odata-api.request",
          "statement": "Clients must bind collection, product attributes, geometry, time, cloud or processing filters, ordering, top and skip paging, and expansion fields using valid OData syntax.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.copernicus-odata-api"
          ]
        },
        {
          "id": "fact.eu.copernicus-odata-api.boundary",
          "statement": "Catalog metadata and satellite products have acquisition, processing, calibration, cloud, latency, and spatial-resolution limits and do not prove ground truth, safety, or legal land status.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.copernicus-odata-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eu.copernicus-odata-api",
          "url": "https://documentation.dataspace.copernicus.eu/APIs/OData.html",
          "title": "Copernicus Data Space OData API",
          "publisher": "European Commission Copernicus Data Space Ecosystem",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.cordis-data-services",
      "title": "CORDIS data services boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for CORDIS data services.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "cordis-data-services",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:e4fc7b636a8356b2a03d5b8d23c8a61d019b77cb52f14ddc956c9b09fa90cc6f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/cordis-data-services.json",
      "htmlPath": "/resources/view/public-data-apis/cordis-data-services",
      "facts": [
        {
          "id": "fact.eu.cordis-data-services.access",
          "statement": "European Commission documents EU research-project, participant, programme, result, report, publication, and downloadable open-data records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.cordis-data-services"
          ]
        },
        {
          "id": "fact.eu.cordis-data-services.authentication",
          "statement": "Public data services do not grant participant identity, proposal submission, funding, project editing, or European Commission authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.cordis-data-services"
          ]
        },
        {
          "id": "fact.eu.cordis-data-services.request",
          "statement": "Clients must bind dataset, project identifier, programme, organization, topic, date, language, download version, and license.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.cordis-data-services"
          ]
        },
        {
          "id": "fact.eu.cordis-data-services.boundary",
          "statement": "CORDIS information can be beneficiary-reported, updated, multilingual, or incomplete and does not prove funding availability, project success, endorsement, or research validity.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.cordis-data-services"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eu.cordis-data-services",
          "url": "https://cordis.europa.eu/about/services",
          "title": "CORDIS data services documentation",
          "publisher": "European Commission",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.crossref-rest-api",
      "title": "Crossref REST API boundary",
      "summary": "Documented Crossref JSON metadata, DOI and journal lookup, rows example, and abstract-rights boundaries; this documentation review does not verify live API availability, rate limits or cursor pagination.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "crossref-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T16:22:24.411Z",
      "contentHash": "sha256:95aa705fc449c17aa3d2f8a2d6d25713521b81f82ec9673c4daa36ce76282460",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T16:22:24.411Z"
      },
      "jsonPath": "/resources/public-data-apis/crossref-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/crossref-rest-api",
      "facts": [
        {
          "id": "fact.crossref.rest-api.access",
          "statement": "The REST base URL https://api.crossref.org/ serves JSON scholarly metadata deposited by members and trusted sources, including funding, licenses, updates, ORCID and ROR identifiers, and abstracts.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.crossref.rest-api"
          ]
        },
        {
          "id": "fact.crossref.rest-api.authentication",
          "statement": "Crossref states that REST access needs no sign-up. Its quick-start polite-pool example uses the mailto query parameter to identify the caller.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.crossref.rest-api"
          ]
        },
        {
          "id": "fact.crossref.rest-api.request",
          "statement": "The documented /works/{doi} route returns one DOI record; /works/{doi}/agency identifies its registration agency, and /journals/{issn}/works selects a journal's works. The quick start uses rows=10 to request ten items.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.crossref.rest-api"
          ]
        },
        {
          "id": "fact.crossref.rest-api.boundary",
          "statement": "Crossref warns that some abstracts in the metadata may carry publisher or author copyright; metadata availability alone does not establish permission to reuse those abstracts.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.crossref.rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.crossref.rest-api",
          "url": "https://www.crossref.org/documentation/retrieve-metadata/rest-api/",
          "title": "Crossref REST API",
          "publisher": "Crossref",
          "observedAt": "2026-09-06T16:22:24.411Z"
        }
      ]
    },
    {
      "id": "resource.public-data.data-europa-eu-api",
      "title": "data.europa.eu APIs boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for data.europa.eu APIs.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "data-europa-eu-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:dd0037ec9d0e4a7ebca702e150e0fb50d1d2d23a50e02ad13868889e0ee6fe34",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/data-europa-eu-api.json",
      "htmlPath": "/resources/view/public-data-apis/data-europa-eu-api",
      "facts": [
        {
          "id": "fact.eu.data-europa-api.access",
          "statement": "data.europa.eu documents search, metadata, SPARQL, registry, and related machine interfaces for discovering European public-sector datasets and catalog records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.data-europa-api"
          ]
        },
        {
          "id": "fact.eu.data-europa-api.authentication",
          "statement": "Public discovery interfaces do not grant access to restricted source datasets, publisher accounts, catalog mutation, legal reuse rights, or representation of the European Union.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.data-europa-api"
          ]
        },
        {
          "id": "fact.eu.data-europa-api.request",
          "statement": "Clients must select the appropriate API, bind query, language, catalog, dataset, facet, paging, and representation parameters, and follow the source dataset's distribution and license links.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.data-europa-api"
          ]
        },
        {
          "id": "fact.eu.data-europa-api.boundary",
          "statement": "Portal metadata is harvested from many publishers and can be stale, incomplete, multilingual, or inconsistent; discovery does not prove dataset availability, quality, legal reuse, or official endorsement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.data-europa-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eu.data-europa-api",
          "url": "https://data.europa.eu/en/which-apis-are-available-and-where-can-i-find-information-about-them",
          "title": "Available data.europa.eu APIs",
          "publisher": "Publications Office of the European Union",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.data-gouv-fr-api",
      "title": "data.gouv.fr API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for data.gouv.fr API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "data-gouv-fr-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:1f9b828a9229d0650cd2f03925e8cda91b7642c032a6399ea19138485da286df",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/data-gouv-fr-api.json",
      "htmlPath": "/resources/view/public-data-apis/data-gouv-fr-api",
      "facts": [
        {
          "id": "fact.fr.data-gouv-api.access",
          "statement": "The data.gouv.fr API exposes dataset, resource, organization, user, reuse, discussion, activity, and catalog-search metadata through a versioned interface.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fr.data-gouv-api"
          ]
        },
        {
          "id": "fact.fr.data-gouv-api.authentication",
          "statement": "Public reads do not require user authority, while create or update operations require authenticated permissions; discovery does not grant rights beyond each dataset's license.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fr.data-gouv-api"
          ]
        },
        {
          "id": "fact.fr.data-gouv-api.request",
          "statement": "Clients must bind the exact collection, identifier, filters, sort, pagination, and representation and follow resource URLs, checksums, formats, and update timestamps.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fr.data-gouv-api"
          ]
        },
        {
          "id": "fact.fr.data-gouv-api.boundary",
          "statement": "Catalog entries are publisher-contributed and can be stale, incomplete, unavailable, or inconsistently licensed; listing does not prove official endorsement, accuracy, or current service health.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fr.data-gouv-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.fr.data-gouv-api",
          "url": "https://www.data.gouv.fr/api/1/",
          "title": "data.gouv.fr API documentation",
          "publisher": "French Interministerial Digital Directorate",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.data-gov-catalog-api",
      "title": "Data.gov Catalog API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Data.gov Catalog API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "data-gov-catalog-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:3b598edf72c0c732fe7f6b4bac3a2290b1e14245bf19bbfa5ef79713d2031f62",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/data-gov-catalog-api.json",
      "htmlPath": "/resources/view/public-data-apis/data-gov-catalog-api",
      "facts": [
        {
          "id": "fact.data-gov.catalog-api.access",
          "statement": "The Data.gov Catalog API v4 searches and filters metadata for datasets published by U.S. federal, state, local, and tribal governments.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.data-gov.catalog-api"
          ]
        },
        {
          "id": "fact.data-gov.catalog-api.authentication",
          "statement": "New clients should use the v4 API instead of the older read-only CKAN endpoint and must send an api.data.gov key or limited DEMO_KEY.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.data-gov.catalog-api"
          ]
        },
        {
          "id": "fact.data-gov.catalog-api.request",
          "statement": "Catalog results contain dataset metadata, URLs, and descriptions rather than guaranteeing that the referenced data files are hosted by Data.gov.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.data-gov.catalog-api"
          ]
        },
        {
          "id": "fact.data-gov.catalog-api.boundary",
          "statement": "A catalog match is not evidence that a referenced resource is reachable, current, licensed for every use, complete, or endorsed by GSA.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.data-gov.catalog-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.data-gov.catalog-api",
          "url": "https://resources.data.gov/catalog-api/",
          "title": "Data.gov Catalog API",
          "publisher": "U.S. General Services Administration",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.data-gov-hk-api",
      "title": "DATA.GOV.HK API specification boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for DATA.GOV.HK API specification.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "data-gov-hk-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:05c82439176bcc022104838cf075d8d045ae75a4f4b8d284b052b0c89bc84e18",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/data-gov-hk-api.json",
      "htmlPath": "/resources/view/public-data-apis/data-gov-hk-api",
      "facts": [
        {
          "id": "fact.data.gov.hk.api.access",
          "statement": "Government of Hong Kong documents Hong Kong open-data catalogue metadata, search, datasets, resources, file formats, and documented API access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.data.gov.hk.api"
          ]
        },
        {
          "id": "fact.data.gov.hk.api.authentication",
          "statement": "Public reads are separate from dataset publication and do not grant department, dataset, legal, licensing, or Hong Kong government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.data.gov.hk.api"
          ]
        },
        {
          "id": "fact.data.gov.hk.api.request",
          "statement": "Clients must bind language, API operation, dataset or resource identifier, category, format, update time, pagination, and download URL.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.data.gov.hk.api"
          ]
        },
        {
          "id": "fact.data.gov.hk.api.boundary",
          "statement": "Catalog and resource data can be revised, delayed, incomplete, or department-supplied and does not prove accuracy, official interpretation, or availability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.data.gov.hk.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.data.gov.hk.api",
          "url": "https://data.gov.hk/en/help/api-spec",
          "title": "DATA.GOV.HK API specification documentation",
          "publisher": "Government of Hong Kong",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.data-gov-sg-api",
      "title": "data.gov.sg API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for data.gov.sg API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "data-gov-sg-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:6d2a6f5425441c72444c6ea3c4ce19cc97e95bb0a397946ae352d94c5206b3e0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/data-gov-sg-api.json",
      "htmlPath": "/resources/view/public-data-apis/data-gov-sg-api",
      "facts": [
        {
          "id": "fact.singapore.data-gov-sg-api.access",
          "statement": "data.gov.sg documents collection, dataset, and real-time APIs for public data published by Singapore government agencies.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.singapore.data-gov-sg-api"
          ]
        },
        {
          "id": "fact.singapore.data-gov-sg-api.authentication",
          "statement": "Public endpoints can be explored without a key, while production clients are advised to use an API key; keys are credentials and must not enter public records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.singapore.data-gov-sg-api"
          ]
        },
        {
          "id": "fact.singapore.data-gov-sg-api.request",
          "statement": "Clients must bind dataset or collection identifiers, row or time filters, pagination parameters, and the documented rate-limit and error behavior for the chosen API.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.singapore.data-gov-sg-api"
          ]
        },
        {
          "id": "fact.singapore.data-gov-sg-api.boundary",
          "statement": "Published datasets retain agency-specific update schedules, units, coverage, revisions, and legal terms and do not prove real-time conditions or government endorsement of an inference.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.singapore.data-gov-sg-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.singapore.data-gov-sg-api",
          "url": "https://guide.data.gov.sg/developer-guide/api-overview",
          "title": "data.gov.sg API Overview",
          "publisher": "Government Technology Agency of Singapore",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.datacite-rest-api",
      "title": "DataCite REST API boundary",
      "summary": "Documented DataCite public reads, Repository write authority, test/production endpoints, legacy routes and script identification. This documentation review does not verify live API operation, paging controls or reuse terms.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "datacite-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T16:52:16.472Z",
      "contentHash": "sha256:51ed7ddb6dd9306a7d4de5a46409230e3e178afb165804d67439da9289573569",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T16:52:16.472Z"
      },
      "jsonPath": "/resources/public-data-apis/datacite-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/datacite-rest-api",
      "facts": [
        {
          "id": "fact.datacite.rest-api.access",
          "statement": "The guide describes JSON:API responses. Public metadata retrieval and authenticated Member functions share https://api.datacite.org; authentication selects Member routing rather than a different base URL.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.datacite.rest-api"
          ]
        },
        {
          "id": "fact.datacite.rest-api.authentication",
          "statement": "Creating or updating DOIs requires an authenticated Repository account. Member and Consortium Organization accounts can view draft and non-Findable records under the documented account matrix, but that matrix does not grant them DOI creation or update capability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.datacite.rest-api"
          ]
        },
        {
          "id": "fact.datacite.rest-api.request",
          "statement": "The test endpoint is https://api.test.datacite.org and production is https://api.datacite.org. Many guide examples use test, so clients must select the intended environment explicitly.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.datacite.rest-api"
          ]
        },
        {
          "id": "fact.datacite.rest-api.boundary",
          "statement": "The guide identifies version 2 as current and /works, /members and /data-centers as version 1 routes. For frequent scripted requests it asks for a User-Agent identifying the integration and a mailto contact.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.datacite.rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.datacite.rest-api",
          "url": "https://support.datacite.org/docs/api",
          "title": "DataCite REST API",
          "publisher": "DataCite",
          "observedAt": "2026-09-06T16:52:16.472Z"
        }
      ]
    },
    {
      "id": "resource.public-data.dataverse-native-api",
      "title": "Dataverse Native API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Dataverse Native API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "dataverse-native-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:c52d722aaaf1560b03c2f527a7efe7d0eb99481c98bf4629d4db18d263b1ed38",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/dataverse-native-api.json",
      "htmlPath": "/resources/view/public-data-apis/dataverse-native-api",
      "facts": [
        {
          "id": "fact.dataverse.native.api.access",
          "statement": "Harvard Dataverse documents dataset, file, metadata, search, collection, version, publication, and administration interfaces.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dataverse.native.api"
          ]
        },
        {
          "id": "fact.dataverse.native.api.authentication",
          "statement": "Public and credentialed operations differ; reads do not grant dataset ownership, publication, curation, file access, administration, or Harvard authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dataverse.native.api"
          ]
        },
        {
          "id": "fact.dataverse.native.api.request",
          "statement": "Clients must bind installation, endpoint, persistent identifier, dataset version, file ID, metadata block, credential, pagination, and representation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dataverse.native.api"
          ]
        },
        {
          "id": "fact.dataverse.native.api.boundary",
          "statement": "Dataverse installations and contributor records vary; metadata, versions, access, and files can change and do not prove research validity, ownership, or reuse permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dataverse.native.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.dataverse.native.api",
          "url": "https://guides.dataverse.org/en/latest/api/native-api.html",
          "title": "Dataverse Native API documentation",
          "publisher": "Harvard Dataverse",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.dblp-search-api",
      "title": "dblp Search API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for dblp Search API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "dblp-search-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:95ddc17cd0bd5a3051cfbd74f303779ed3e2bca8dcb07456920fdf3bb0517d4d",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/dblp-search-api.json",
      "htmlPath": "/resources/view/public-data-apis/dblp-search-api",
      "facts": [
        {
          "id": "fact.dblp.search-api.access",
          "statement": "The dblp Search API exposes publication, author, and venue searches with XML, JSON, and JSONP representations over dblp bibliographic metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dblp.search-api"
          ]
        },
        {
          "id": "fact.dblp.search-api.authentication",
          "statement": "Public reads do not grant editorial access, author-identity control, full-text access, or rights to third-party works referenced by the metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dblp.search-api"
          ]
        },
        {
          "id": "fact.dblp.search-api.request",
          "statement": "Clients must select search family and bind query, result count, first-hit offset, and format; the documented hit count is capped and deep or bulk retrieval needs other channels.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dblp.search-api"
          ]
        },
        {
          "id": "fact.dblp.search-api.boundary",
          "statement": "Bibliographic records can be merged, split, corrected, delayed, or incomplete and do not prove person identity, authorship intent, research validity, or full-text licensing.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dblp.search-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.dblp.search-api",
          "url": "https://dblp.org/faq/How+to+use+the+dblp+search+API.html",
          "title": "dblp Search API",
          "publisher": "Schloss Dagstuhl – Leibniz Center for Informatics",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.deps-dev-api",
      "title": "deps.dev API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for deps.dev API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "deps-dev-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:687e752c53dd7808cf1c6e3783bd35ad27fc787661382e323fe886824652af57",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/deps-dev-api.json",
      "htmlPath": "/resources/view/public-data-apis/deps-dev-api",
      "facts": [
        {
          "id": "fact.deps-dev.api.access",
          "statement": "Google Open Source Insights documents package systems, packages, versions, projects, dependencies, advisories, licenses, and attestations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.deps-dev.api"
          ]
        },
        {
          "id": "fact.deps-dev.api.authentication",
          "statement": "Public reads do not grant package, project, advisory, repository, dependency, or Google ownership or editing authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.deps-dev.api"
          ]
        },
        {
          "id": "fact.deps-dev.api.request",
          "statement": "Clients must bind system, package name, version, project key, dependency graph, page token, API version, and returned relation type.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.deps-dev.api"
          ]
        },
        {
          "id": "fact.deps-dev.api.boundary",
          "statement": "Aggregated dependency, license, score, and advisory data can be incomplete, delayed, inferred, or ecosystem-specific and does not prove safety, legal compliance, or reachability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.deps-dev.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.deps-dev.api",
          "url": "https://docs.deps.dev/api/v3/",
          "title": "deps.dev API documentation",
          "publisher": "Google Open Source Insights",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.destatis-genesis-api",
      "title": "Destatis GENESIS API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Destatis GENESIS API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "destatis-genesis-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:f18fe4a279b8ea038adcf224ecd3968a483586f2744e2d92d8c535a62da2ec15",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/destatis-genesis-api.json",
      "htmlPath": "/resources/view/public-data-apis/destatis-genesis-api",
      "facts": [
        {
          "id": "fact.destatis.genesis-api.access",
          "statement": "GENESIS-Online exposes the German Federal Statistical Office's configurable tables through a RESTful JSON web-service interface and machine-oriented flat-file downloads.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.destatis.genesis-api"
          ]
        },
        {
          "id": "fact.destatis.genesis-api.authentication",
          "statement": "The data stock is free and available without registration under Data Licence Germany Attribution 2.0, while account-administration methods remain separate from public statistical use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.destatis.genesis-api"
          ]
        },
        {
          "id": "fact.destatis.genesis-api.request",
          "statement": "Clients must use current POST methods, select service and method, table or series code, language, format, filters, and bounded values; retired SOAP and REST GET methods must not be treated as current.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.destatis.genesis-api"
          ]
        },
        {
          "id": "fact.destatis.genesis-api.boundary",
          "statement": "GENESIS observations and metadata can be revised, suppressed, sampled, territorially changed, or method-dependent and do not prove individual circumstances or cross-table comparability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.destatis.genesis-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.destatis.genesis-api",
          "url": "https://www.destatis.de/EN/Service/OpenData/api-webservice.html",
          "title": "GENESIS-Online API and Web Service",
          "publisher": "Federal Statistical Office of Germany",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.digitalnz-api",
      "title": "DigitalNZ API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for DigitalNZ API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "digitalnz-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:770b1ff56ee567eb3dac8327954a7ac7a6b031e0730cd5cfa36061957052e876",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/digitalnz-api.json",
      "htmlPath": "/resources/view/public-data-apis/digitalnz-api",
      "facts": [
        {
          "id": "fact.digitalnz.api.access",
          "statement": "National Library of New Zealand documents search, metadata, source, collection, and record access across contributed New Zealand digital collections.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.digitalnz.api"
          ]
        },
        {
          "id": "fact.digitalnz.api.authentication",
          "statement": "Requests follow documented API-key rules; reads do not grant record editing, contributor identity, ownership, copyright, or National Library authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.digitalnz.api"
          ]
        },
        {
          "id": "fact.digitalnz.api.request",
          "statement": "Clients must bind search text, fields, facets, source, collection, page, result count, API key, and rights metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.digitalnz.api"
          ]
        },
        {
          "id": "fact.digitalnz.api.boundary",
          "statement": "Aggregated collection metadata can be incomplete, duplicated, revised, or rights-limited and does not prove authenticity, ownership, attribution, or reuse permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.digitalnz.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.digitalnz.api",
          "url": "https://digitalnz.org/developers",
          "title": "DigitalNZ API documentation",
          "publisher": "National Library of New Zealand",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.doaj-api",
      "title": "Directory of Open Access Journals API boundary",
      "summary": "Documented public search, record access, authenticated application routes and bounded query rules from DOAJ's guide and linked v4 specification. This review does not verify live API execution, an account's permissions, metadata validity or reuse rights.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "doaj-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T19:20:01.480Z",
      "contentHash": "sha256:6b195b53da0781fd65044618b747f9f43cc370cf8d8a42c28507474f05e506f2",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T19:20:01.480Z"
      },
      "jsonPath": "/resources/public-data-apis/doaj-api.json",
      "htmlPath": "/resources/view/public-data-apis/doaj-api",
      "facts": [
        {
          "id": "fact.doaj.api.access",
          "statement": "Public GET searches use /api/search/articles/{search_query} and /api/search/journals/{search_query}. Journal reads use /api/journals/{journal_id}; article reads use /api/articles/{article_id}. Not every field is present in every record.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.doaj.api.swagger",
            "source.doaj.api"
          ]
        },
        {
          "id": "fact.doaj.api.authentication",
          "statement": "Article GET accepts an optional api_key, which may also expose the caller's own non-public records. Application reads and searches require api_key, as do documented article/application writes. Public search grants none of those permissions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.doaj.api.swagger"
          ]
        },
        {
          "id": "fact.doaj.api.request",
          "statement": "Search requires a path search_query and accepts page, pageSize and sort. pageSize defaults to 10 and is limited to 100. The guide's sort=field[:direction] supports asc or desc and defaults to asc.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.doaj.api.swagger",
            "source.doaj.api"
          ]
        },
        {
          "id": "fact.doaj.api.boundary",
          "statement": "The guide documents two requests per second across API routes, not measured throughput. Wildcard, regular-expression, fuzzy and proximity searches are disabled. The .exact suffix is for full string field names, not short-name substitutions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.doaj.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.doaj.api",
          "url": "https://doaj.org/api/docs",
          "title": "DOAJ API Documentation",
          "publisher": "Directory of Open Access Journals",
          "observedAt": "2026-09-06T19:20:01.480Z"
        },
        {
          "id": "source.doaj.api.swagger",
          "url": "https://doaj.org/api/v4/swagger.json",
          "title": "DOAJ API v4 Swagger specification",
          "publisher": "Directory of Open Access Journals",
          "observedAt": "2026-09-06T19:20:55.204Z"
        }
      ]
    },
    {
      "id": "resource.public-data.dwd-open-data",
      "title": "DWD Open Data boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for DWD Open Data.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "dwd-open-data",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:d86323b8384eb66581edac6494188dc78408b7a1e4f315dd185e78b4b16851c0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/dwd-open-data.json",
      "htmlPath": "/resources/view/public-data-apis/dwd-open-data",
      "facts": [
        {
          "id": "fact.dwd.open.data.access",
          "statement": "Deutscher Wetterdienst documents weather, climate, forecast, radar, observation, warning, and model-product files.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dwd.open.data"
          ]
        },
        {
          "id": "fact.dwd.open.data.authentication",
          "statement": "Public file access does not grant warning, forecast, observation, station, model, or Deutscher Wetterdienst publication authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dwd.open.data"
          ]
        },
        {
          "id": "fact.dwd.open.data.request",
          "statement": "Clients must bind directory, product, station or grid, issue time, valid time, file format, compression, and update cadence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dwd.open.data"
          ]
        },
        {
          "id": "fact.dwd.open.data.boundary",
          "statement": "Files have product-specific quality, coverage, latency, version, and interpretation constraints and do not replace official warnings or safety decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dwd.open.data"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.dwd.open.data",
          "url": "https://opendata.dwd.de/",
          "title": "DWD Open Data documentation",
          "publisher": "Deutscher Wetterdienst",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.earthscope-fdsn-web-services",
      "title": "EarthScope FDSN web services boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for EarthScope FDSN web services.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "earthscope-fdsn-web-services",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:f0d8f8487f97ecdee2ee765ec4ba387881d61862c74a5afdcdb0aa88d10bca53",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/earthscope-fdsn-web-services.json",
      "htmlPath": "/resources/view/public-data-apis/earthscope-fdsn-web-services",
      "facts": [
        {
          "id": "fact.earthscope.fdsn-services.access",
          "statement": "EarthScope Consortium documents seismic events, waveforms, station metadata, availability, and supporting federated seismology services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.earthscope.fdsn-services"
          ]
        },
        {
          "id": "fact.earthscope.fdsn-services.authentication",
          "statement": "Documented public reads are separate from restricted data and do not grant network, station, event-review, or hazard authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.earthscope.fdsn-services"
          ]
        },
        {
          "id": "fact.earthscope.fdsn-services.request",
          "statement": "Clients must bind service version, network, station, location, channel, time, event, format, and result limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.earthscope.fdsn-services"
          ]
        },
        {
          "id": "fact.earthscope.fdsn-services.boundary",
          "statement": "Waveforms and catalogs vary by network, latency, quality, processing, and review state and do not independently establish event impact or safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.earthscope.fdsn-services"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.earthscope.fdsn-services",
          "url": "https://service.iris.edu/",
          "title": "EarthScope FDSN web services documentation",
          "publisher": "EarthScope Consortium",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ebi-ontology-lookup-service-api",
      "title": "Ontology Lookup Service API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Ontology Lookup Service API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ebi-ontology-lookup-service-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:b8764ab86ef36a966c23309724e34d76b618dff42147d47cb762cf05970f6b37",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/ebi-ontology-lookup-service-api.json",
      "htmlPath": "/resources/view/public-data-apis/ebi-ontology-lookup-service-api",
      "facts": [
        {
          "id": "fact.ebi.ols-api.access",
          "statement": "The Ontology Lookup Service provides public discovery of biomedical ontologies, terms, properties, hierarchies, synonyms, mappings, and release metadata through REST endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.ols-api"
          ]
        },
        {
          "id": "fact.ebi.ols-api.authentication",
          "statement": "Public reads require no user credential and do not grant ontology ownership, term submission, curation, release, standards, or clinical authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.ols-api"
          ]
        },
        {
          "id": "fact.ebi.ols-api.request",
          "statement": "Clients must bind ontology and term identifiers, search text, field and synonym behavior, hierarchy traversal, language, page size, and pagination and preserve ontology-version context.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.ols-api"
          ]
        },
        {
          "id": "fact.ebi.ols-api.boundary",
          "statement": "Ontology terms and mappings can be deprecated, ambiguous, inferred, or inconsistent across sources and do not prove biological equivalence, diagnosis, causal relation, or current consensus.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.ols-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.ols-api",
          "url": "https://www.ebi.ac.uk/ols4/help",
          "title": "Ontology Lookup Service help and API",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ebi-proteins-api",
      "title": "EMBL-EBI Proteins API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for EMBL-EBI Proteins API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ebi-proteins-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:75946978f5a54323324477fd9c989ec8a3b44ad62294c2317d7f3dbea4252bab",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/ebi-proteins-api.json",
      "htmlPath": "/resources/view/public-data-apis/ebi-proteins-api",
      "facts": [
        {
          "id": "fact.ebi.proteins-api.access",
          "statement": "The Proteins API exposes UniProt protein sequence, feature, variation, proteomics, taxonomy, antigen, and coordinate information through REST endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.proteins-api"
          ]
        },
        {
          "id": "fact.ebi.proteins-api.authentication",
          "statement": "Public reads require no user credential and do not grant UniProt submission, curation, release, clinical, diagnostic, or annotation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.proteins-api"
          ]
        },
        {
          "id": "fact.ebi.proteins-api.request",
          "statement": "Clients must bind accession, taxon, chromosome, position, feature, evidence, format, page size, and pagination and distinguish reviewed from unreviewed records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.proteins-api"
          ]
        },
        {
          "id": "fact.ebi.proteins-api.boundary",
          "statement": "Protein features and variants can be predicted, literature-derived, isoform-specific, or revised and do not prove expression, pathogenicity, phenotype, function, or clinical significance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.proteins-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.proteins-api",
          "url": "https://www.ebi.ac.uk/proteins/api/doc/",
          "title": "Proteins API documentation",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ebi-search-api",
      "title": "EMBL-EBI Search API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for EMBL-EBI Search API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ebi-search-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:2bcfcbb3f20e7d1f0be79d9b538d88090b7a665391b0cbd8821bcdb120c27afb",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/ebi-search-api.json",
      "htmlPath": "/resources/view/public-data-apis/ebi-search-api",
      "facts": [
        {
          "id": "fact.ebi.search-api.access",
          "statement": "EBI Search provides a cross-domain REST interface for querying indexed biological records, fields, facets, cross-references, and result summaries from participating EMBL-EBI resources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.search-api"
          ]
        },
        {
          "id": "fact.ebi.search-api.authentication",
          "statement": "Documented public searches require no user credential and do not grant source-database submission, curation, embargo, or account authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.search-api"
          ]
        },
        {
          "id": "fact.ebi.search-api.request",
          "statement": "Clients must bind domain, query syntax, fields, facets, sort, pagination, format, and cross-reference expansion and treat domain schemas and release schedules independently.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.search-api"
          ]
        },
        {
          "id": "fact.ebi.search-api.boundary",
          "statement": "Cross-resource search results reflect indexed source records and mappings that can lag, change, or conflict and do not prove biological identity, clinical validity, completeness, or current annotation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.search-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.search-api",
          "url": "https://www.ebi.ac.uk/ebisearch/documentation/rest-api",
          "title": "EBI Search REST API documentation",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ebird-api",
      "title": "eBird API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for eBird API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ebird-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:a7126e803430138678dcf08c3c7d9ee7f3ffd4fb74d0b67cf69338746b991d97",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/ebird-api.json",
      "htmlPath": "/resources/view/public-data-apis/ebird-api",
      "facts": [
        {
          "id": "fact.ebird.api.access",
          "statement": "Cornell Lab of Ornithology documents recent and historical bird observations, hotspots, regions, taxonomy, checklists, and product data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebird.api"
          ]
        },
        {
          "id": "fact.ebird.api.authentication",
          "statement": "Requests require a documented API key for applicable endpoints; reads do not grant observer identity, record editing, validation, conservation, or Cornell authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebird.api"
          ]
        },
        {
          "id": "fact.ebird.api.request",
          "statement": "Clients must bind region or coordinates, species, date, distance, rank, locale, result limit, detail, and API key.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebird.api"
          ]
        },
        {
          "id": "fact.ebird.api.boundary",
          "statement": "Observations are community-contributed and filtered and can be delayed, obscured, revised, or spatially imprecise; they do not prove absence, abundance, identity, or habitat condition.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebird.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebird.api",
          "url": "https://documenter.getpostman.com/view/664302/S1ENwy59",
          "title": "eBird API documentation",
          "publisher": "Cornell Lab of Ornithology",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ecb-sdmx-api",
      "title": "ECB Data Portal SDMX API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for ECB Data Portal SDMX API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ecb-sdmx-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:f229942ffcebc0f00a874a4a405945737a9e191b4713f7207bb43877e96f9282",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/ecb-sdmx-api.json",
      "htmlPath": "/resources/view/public-data-apis/ecb-sdmx-api",
      "facts": [
        {
          "id": "fact.ecb.sdmx-api.access",
          "statement": "The ECB SDMX 2.1 RESTful web service supports statistical data retrieval and metadata-driven discovery for data disseminated through the ECB Data Portal.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ecb.sdmx-api"
          ]
        },
        {
          "id": "fact.ecb.sdmx-api.authentication",
          "statement": "Public reads use HTTPS and require clients to resolve dataflow, series key, dimensions, date filters, and the intended data or structure representation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ecb.sdmx-api"
          ]
        },
        {
          "id": "fact.ecb.sdmx-api.request",
          "statement": "Specific SDMX or ECB media types are safer than generic JSON or XML types whose mapped version can change, and large requests should be filtered and compressed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ecb.sdmx-api"
          ]
        },
        {
          "id": "fact.ecb.sdmx-api.boundary",
          "statement": "ECB observations and metadata can be revised, discontinued, method-dependent, or incomplete and do not constitute financial advice or proof of economic causation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ecb.sdmx-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ecb.sdmx-api",
          "url": "https://data.ecb.europa.eu/help/getting-data-web-services-sdmx-0",
          "title": "Getting data via web services (SDMX)",
          "publisher": "European Central Bank",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ecmwf-open-data",
      "title": "ECMWF Open Data boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for ECMWF Open Data.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ecmwf-open-data",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:41b995ee65328da6f2fcc87a87942915953ca445b78b9cebd248fb06bcaa63a7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/ecmwf-open-data.json",
      "htmlPath": "/resources/view/public-data-apis/ecmwf-open-data",
      "facts": [
        {
          "id": "fact.ecmwf.open-data.access",
          "statement": "European Centre for Medium-Range Weather Forecasts documents selected real-time forecast fields, model runs, parameters, levels, steps, and GRIB files.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ecmwf.open-data"
          ]
        },
        {
          "id": "fact.ecmwf.open-data.authentication",
          "statement": "Open-data retrieval does not grant forecast issuance, model operation, restricted dataset access, warning, or ECMWF representation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ecmwf.open-data"
          ]
        },
        {
          "id": "fact.ecmwf.open-data.request",
          "statement": "Clients must bind model, run time, stream, type, parameter, level, forecast step, file pattern, and update schedule.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ecmwf.open-data"
          ]
        },
        {
          "id": "fact.ecmwf.open-data.boundary",
          "statement": "Numerical forecasts have resolution, initialization, ensemble, latency, and uncertainty limits and do not replace official warnings or local safety decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ecmwf.open-data"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ecmwf.open-data",
          "url": "https://www.ecmwf.int/en/forecasts/datasets/open-data",
          "title": "ECMWF Open Data documentation",
          "publisher": "European Centre for Medium-Range Weather Forecasts",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.eia-open-data-api",
      "title": "U.S. EIA Open Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for U.S. EIA Open Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "eia-open-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:eab7b2d85b8f34260f2880d3e4b255772325461c49add8172dbe139d45ef0005",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/eia-open-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/eia-open-data-api",
      "facts": [
        {
          "id": "fact.eia.open-data-api.access",
          "statement": "EIA API v2 exposes energy datasets through a REST hierarchy with metadata, facets, frequency, date, sort, and pagination controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eia.open-data-api"
          ]
        },
        {
          "id": "fact.eia.open-data-api.authentication",
          "statement": "Every API call requires a free registered key, which is a credential and must not be embedded in public resource records or client output.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eia.open-data-api"
          ]
        },
        {
          "id": "fact.eia.open-data-api.request",
          "statement": "Clients should bind to API v2 and its route metadata rather than relying on deprecated v1 series behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eia.open-data-api"
          ]
        },
        {
          "id": "fact.eia.open-data-api.boundary",
          "statement": "Free access and a successful response do not prove a series is unrevised, complete, current, endorsed, or suitable for financial or operational decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eia.open-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eia.open-data-api",
          "url": "https://www.eia.gov/opendata/documentation.php",
          "title": "EIA API Technical Documentation",
          "publisher": "U.S. Energy Information Administration",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.elexon-insights-api",
      "title": "Elexon Insights Solution API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Elexon Insights Solution API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "elexon-insights-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:2e0795c8255a3774bca1083daed3af7f662059fed197c6c921ee3ee0f427dba9",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/elexon-insights-api.json",
      "htmlPath": "/resources/view/public-data-apis/elexon-insights-api",
      "facts": [
        {
          "id": "fact.elexon.insights-api.access",
          "statement": "Elexon documents Great Britain balancing, generation, demand, system price, fuel, forecast, and market datasets.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.elexon.insights-api"
          ]
        },
        {
          "id": "fact.elexon.insights-api.authentication",
          "statement": "Documented public reads do not grant market participant, submission, settlement, dispatch, trading, or Elexon authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.elexon.insights-api"
          ]
        },
        {
          "id": "fact.elexon.insights-api.request",
          "statement": "Clients must bind endpoint, settlement date or period, time range, participant or unit, fuel, format, paging, and limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.elexon.insights-api"
          ]
        },
        {
          "id": "fact.elexon.insights-api.boundary",
          "statement": "Market and operational data can be revised, estimated, delayed, or settlement-dependent and does not prove payment, performance, future price, or trading suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.elexon.insights-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.elexon.insights-api",
          "url": "https://developer.data.elexon.co.uk/",
          "title": "Elexon Insights Solution API documentation",
          "publisher": "Elexon",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ena-portal-api",
      "title": "ENA Portal API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for ENA Portal API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ena-portal-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:2efcb7a38cac137d781aca169bd9c0f3c43309bd775a630609d8a6e4d70cd682",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/ena-portal-api.json",
      "htmlPath": "/resources/view/public-data-apis/ena-portal-api",
      "facts": [
        {
          "id": "fact.ebi.ena-portal-api.access",
          "statement": "The ENA Portal API exposes nucleotide-sequence, assembly, study, sample, experiment, run, analysis, and taxonomic metadata through query, search, and report endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.ena-portal-api"
          ]
        },
        {
          "id": "fact.ebi.ena-portal-api.authentication",
          "statement": "Public archive reads require no user credential, while submission and private-data access use separate Webin authentication that must not appear in public records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.ena-portal-api"
          ]
        },
        {
          "id": "fact.ebi.ena-portal-api.request",
          "statement": "Clients must bind result type, query language, fields, format, limit, offset, sorting, and download mode and should use documented field and result vocabularies.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.ena-portal-api"
          ]
        },
        {
          "id": "fact.ebi.ena-portal-api.boundary",
          "statement": "Submitted and derived records can be updated, suppressed, embargoed, reassembled, or misannotated and do not prove sequence quality, biological function, sample identity, or clinical validity.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.ena-portal-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.ena-portal-api",
          "url": "https://www.ebi.ac.uk/ena/portal/api/",
          "title": "ENA Portal API",
          "publisher": "European Nucleotide Archive at EMBL-EBI",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ensembl-rest-api",
      "title": "Ensembl REST API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Ensembl REST API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ensembl-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:89751aa2642f6d466bcc9542a6b7902b32728ce35006874064266222dc4df573",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/ensembl-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/ensembl-rest-api",
      "facts": [
        {
          "id": "fact.ensembl.rest-api.access",
          "statement": "The Ensembl REST API exposes archive, comparative-genomics, cross-reference, feature, sequence, overlap, variation, taxonomy, assembly, and service-version information across supported species.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ensembl.rest-api"
          ]
        },
        {
          "id": "fact.ensembl.rest-api.authentication",
          "statement": "Public read endpoints require no user account and do not grant data-submission, annotation, release, compute-cluster, or source-database mutation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ensembl.rest-api"
          ]
        },
        {
          "id": "fact.ensembl.rest-api.request",
          "statement": "Clients must bind endpoint, species, stable identifier, region, assembly, feature type, content negotiation, and documented GET or POST batch limits and inspect service and data release versions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ensembl.rest-api"
          ]
        },
        {
          "id": "fact.ensembl.rest-api.boundary",
          "statement": "Genomic coordinates, identifiers, homologies, consequences, and annotations are assembly- and release-dependent and do not prove phenotype, disease causation, experimental validity, or clinical actionability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ensembl.rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ensembl.rest-api",
          "url": "https://rest.ensembl.org/",
          "title": "Ensembl REST API Endpoints",
          "publisher": "European Molecular Biology Laboratory European Bioinformatics Institute",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.environment-canada-geomet-api",
      "title": "Environment and Climate Change Canada GeoMet API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Environment and Climate Change Canada GeoMet API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "environment-canada-geomet-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:787085d3fc57291f22cbd8e480d5c3190cfd12c40f4bf1f63504575345d3a36b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/environment-canada-geomet-api.json",
      "htmlPath": "/resources/view/public-data-apis/environment-canada-geomet-api",
      "facts": [
        {
          "id": "fact.eccc.geomet-api.access",
          "statement": "Environment and Climate Change Canada documents weather, climate, hydrology, radar, warning, forecast, and geospatial collections through OGC services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eccc.geomet-api"
          ]
        },
        {
          "id": "fact.eccc.geomet-api.authentication",
          "statement": "Public geospatial reads do not grant alert issuance, observation, forecast publication, source mutation, or Canadian-government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eccc.geomet-api"
          ]
        },
        {
          "id": "fact.eccc.geomet-api.request",
          "statement": "Clients must bind collection, spatial and temporal extent, property, coordinate reference system, format, paging, and update time.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eccc.geomet-api"
          ]
        },
        {
          "id": "fact.eccc.geomet-api.boundary",
          "statement": "GeoMet products have coverage, model, sensor, quality, latency, and revision limits and do not replace official alerts, navigation, or emergency advice.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eccc.geomet-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eccc.geomet-api",
          "url": "https://eccc-msc.github.io/open-data/msc-geomet/readme_en/",
          "title": "Environment and Climate Change Canada GeoMet API documentation",
          "publisher": "Environment and Climate Change Canada",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.epa-aqs-data-api",
      "title": "EPA AQS Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for EPA AQS Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "epa-aqs-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:4b715aa9ab96f2534698f5cae4111631ea7a057ddcfc9e7a2884ff1734004413",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/epa-aqs-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/epa-aqs-data-api",
      "facts": [
        {
          "id": "fact.epa.aqs-api.access",
          "statement": "U.S. Environmental Protection Agency documents Air Quality System sample data, monitors, sites, quality assurance, and reference metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.aqs-api"
          ]
        },
        {
          "id": "fact.epa.aqs-api.authentication",
          "statement": "Most calls require registered email and key parameters that must not be published as credentials; access does not grant monitor, certification, submission, or regulatory authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.aqs-api"
          ]
        },
        {
          "id": "fact.epa.aqs-api.request",
          "statement": "Clients must bind service, parameter, geography, site, date range, sample duration, and request limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.aqs-api"
          ]
        },
        {
          "id": "fact.epa.aqs-api.boundary",
          "statement": "AQS observations have certification, completeness, method, exceptional-event, and revision context and do not alone establish exposure or compliance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.aqs-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.epa.aqs-api",
          "url": "https://aqs.epa.gov/aqsweb/documents/data_api.html",
          "title": "EPA AQS Data API documentation",
          "publisher": "U.S. Environmental Protection Agency",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.epa-echo-web-services",
      "title": "EPA ECHO web services boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for EPA ECHO web services.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "epa-echo-web-services",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:4ee3c06de3e20e9ddd790a614cb4664441c182d1661705ecaba6ce58dfa5a8f5",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/epa-echo-web-services.json",
      "htmlPath": "/resources/view/public-data-apis/epa-echo-web-services",
      "facts": [
        {
          "id": "fact.epa.echo-services.access",
          "statement": "U.S. Environmental Protection Agency documents facility, permit, inspection, enforcement, compliance, pollutant, and geographic query services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.echo-services"
          ]
        },
        {
          "id": "fact.epa.echo-services.authentication",
          "statement": "Public reads do not grant facility identity, filing, enforcement, permit, compliance-determination, or EPA decision authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.echo-services"
          ]
        },
        {
          "id": "fact.epa.echo-services.request",
          "statement": "Clients must bind program, facility identifier, geography, date, pollutant, output fields, paging, and service-specific limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.echo-services"
          ]
        },
        {
          "id": "fact.epa.echo-services.boundary",
          "statement": "ECHO integrates multiple reported systems with different update cycles and does not prove current compliance, liability, ownership, or environmental impact.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.echo-services"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.epa.echo-services",
          "url": "https://echo.epa.gov/tools/web-services",
          "title": "EPA ECHO web services documentation",
          "publisher": "U.S. Environmental Protection Agency",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.epa-envirofacts-data-service-api",
      "title": "EPA Envirofacts Data Service API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for EPA Envirofacts Data Service API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "epa-envirofacts-data-service-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:5a802426a9315e6a194b0288b498949db44b23d9d7935e6b788f2b6993f13006",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/epa-envirofacts-data-service-api.json",
      "htmlPath": "/resources/view/public-data-apis/epa-envirofacts-data-service-api",
      "facts": [
        {
          "id": "fact.epa.envirofacts-data-service-api.access",
          "statement": "Envirofacts provides a RESTful data service over documented EPA tables with JSON by default and several alternate export representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.envirofacts-data-service-api"
          ]
        },
        {
          "id": "fact.epa.envirofacts-data-service-api.authentication",
          "statement": "The service aggregates data from multiple environmental programs, so table, column, join key, operator, range, sort, and format are part of the query contract.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.envirofacts-data-service-api"
          ]
        },
        {
          "id": "fact.epa.envirofacts-data-service-api.request",
          "statement": "Requests must complete within the documented execution window; broad retrievals should be paged instead of assuming one unbounded response.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.envirofacts-data-service-api"
          ]
        },
        {
          "id": "fact.epa.envirofacts-data-service-api.boundary",
          "statement": "Aggregated environmental records can differ in source method, refresh schedule, geography, and completeness and do not establish exposure, causation, or legal compliance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epa.envirofacts-data-service-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.epa.envirofacts-data-service-api",
          "url": "https://www.epa.gov/enviro/envirofacts-data-service-api",
          "title": "Envirofacts Data Service API",
          "publisher": "U.S. Environmental Protection Agency",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.epo-open-patent-services",
      "title": "EPO Open Patent Services boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for EPO Open Patent Services.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "epo-open-patent-services",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:bcfc656db515d4149e3c76309e5bc84676eb409e0c6af4c765d206ccc60f1fa8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/epo-open-patent-services.json",
      "htmlPath": "/resources/view/public-data-apis/epo-open-patent-services",
      "facts": [
        {
          "id": "fact.epo.open-patent-services.access",
          "statement": "EPO Open Patent Services provides REST and XML access to published patent bibliographic, family, full-text, image, register, and legal-event data families.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epo.open-patent-services"
          ]
        },
        {
          "id": "fact.epo.open-patent-services.authentication",
          "statement": "Access uses registered OAuth client credentials, which are secrets and do not grant patent-filing, register-change, representative, or payment authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epo.open-patent-services"
          ]
        },
        {
          "id": "fact.epo.open-patent-services.request",
          "statement": "Clients must bind service family, publication or application identifier, range, representation, token lifecycle, quota, and fair-use pacing; free use has documented volume limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epo.open-patent-services"
          ]
        },
        {
          "id": "fact.epo.open-patent-services.boundary",
          "statement": "Patent records and legal events can be delayed, corrected, jurisdiction-specific, or incomplete and do not replace the official register, current legal-status analysis, or legal advice.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.epo.open-patent-services"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.epo.open-patent-services",
          "url": "https://developers.epo.org/",
          "title": "EPO Open Patent Services",
          "publisher": "European Patent Office",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.eu-ted-search-api",
      "title": "EU TED Search API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for EU TED Search API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "eu-ted-search-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:b2f8d6d329e0922e8bf75221361b74143d3039abebe0820360073ff2863f369a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/eu-ted-search-api.json",
      "htmlPath": "/resources/view/public-data-apis/eu-ted-search-api",
      "facts": [
        {
          "id": "fact.eu.ted-search-api.access",
          "statement": "The TED Search API exposes published European public-procurement notices through a versioned search endpoint and documented notice, query, and field representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.ted-search-api"
          ]
        },
        {
          "id": "fact.eu.ted-search-api.authentication",
          "statement": "Anonymous search is supported for public notices, while API availability does not authorize notice submission, buyer actions, account access, or procurement participation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.ted-search-api"
          ]
        },
        {
          "id": "fact.eu.ted-search-api.request",
          "statement": "Clients must issue the documented search request with query, selected fields, page, limit, scope, and iteration controls and preserve publication and modification identifiers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.ted-search-api"
          ]
        },
        {
          "id": "fact.eu.ted-search-api.boundary",
          "statement": "A TED notice is publisher-supplied procurement information that can be corrected, replaced, cancelled, translated, or legally qualified and does not prove award performance or eligibility.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.ted-search-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eu.ted-search-api",
          "url": "https://docs.ted.europa.eu/api/latest/index.html",
          "title": "TED Search API",
          "publisher": "Publications Office of the European Union",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.eumetsat-data-store",
      "title": "EUMETSAT Data Store boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for EUMETSAT Data Store.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "eumetsat-data-store",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:2431e283792b612190b661a5ad01dab45f64b2c16a13b4103b7314178a3cd91a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/eumetsat-data-store.json",
      "htmlPath": "/resources/view/public-data-apis/eumetsat-data-store",
      "facts": [
        {
          "id": "fact.eumetsat.data.store.access",
          "statement": "EUMETSAT documents satellite products, collections, discovery metadata, downloads, customization, and documented data-store services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eumetsat.data.store"
          ]
        },
        {
          "id": "fact.eumetsat.data.store.authentication",
          "statement": "Some access requires an account or token; reads do not grant satellite, instrument, product, warning, redistribution, or EUMETSAT authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eumetsat.data.store"
          ]
        },
        {
          "id": "fact.eumetsat.data.store.request",
          "statement": "Clients must bind collection and product identifier, sensing time, satellite or instrument, spatial subset, format, token, order, and quota.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eumetsat.data.store"
          ]
        },
        {
          "id": "fact.eumetsat.data.store.boundary",
          "statement": "Satellite products have processing level, calibration, coverage, latency, cloud, quality, and license constraints and do not prove local conditions or safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eumetsat.data.store"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eumetsat.data.store",
          "url": "https://www.eumetsat.int/eumetsat-data-store",
          "title": "EUMETSAT Data Store documentation",
          "publisher": "EUMETSAT",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.eumetsat-data-store-api",
      "title": "EUMETSAT Data Store API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for EUMETSAT Data Store API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "eumetsat-data-store-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:61560ce736ec857f0e60dd943404791323f2bba30a2cdd52f35733f1a91d5396",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/eumetsat-data-store-api.json",
      "htmlPath": "/resources/view/public-data-apis/eumetsat-data-store-api",
      "facts": [
        {
          "id": "fact.eumetsat.data-store-api.access",
          "statement": "EUMETSAT Data Store interfaces support discovery and download of satellite observation and derived meteorological products through catalog and data APIs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eumetsat.data-store-api"
          ]
        },
        {
          "id": "fact.eumetsat.data-store-api.authentication",
          "statement": "Downloads require registered API credentials or tokens, which must remain secret; access does not grant satellite control, product publication, forecasting, or emergency authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eumetsat.data-store-api"
          ]
        },
        {
          "id": "fact.eumetsat.data-store-api.request",
          "statement": "Clients must bind collection, product, spatial and temporal filters, paging, output handling, token lifecycle, and download limits and validate returned metadata before processing files.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eumetsat.data-store-api"
          ]
        },
        {
          "id": "fact.eumetsat.data-store-api.boundary",
          "statement": "Satellite products have coverage, calibration, latency, cloud, processing, and algorithm constraints and do not independently establish local weather, hazard impact, or operational safety decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eumetsat.data-store-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eumetsat.data-store-api",
          "url": "https://api.eumetsat.int/api-key/",
          "title": "EUMETSAT Data Store APIs",
          "publisher": "European Organisation for the Exploitation of Meteorological Satellites",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.eur-lex-webservice",
      "title": "EUR-Lex webservice boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for EUR-Lex webservice.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "eur-lex-webservice",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:5d8694a2dd50d10ce999381aa6e52c81976c8b687cfac3618130f2ba3c0c9faf",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/eur-lex-webservice.json",
      "htmlPath": "/resources/view/public-data-apis/eur-lex-webservice",
      "facts": [
        {
          "id": "fact.eu.eur-lex-webservice.access",
          "statement": "Publications Office of the European Union documents EU legal-document search results and metadata through documented SOAP and data-reuse services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.eur-lex-webservice"
          ]
        },
        {
          "id": "fact.eu.eur-lex-webservice.authentication",
          "statement": "Access follows documented registration or service rules and does not grant document alteration, legal interpretation, institutional identity, or European Union authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.eur-lex-webservice"
          ]
        },
        {
          "id": "fact.eu.eur-lex-webservice.request",
          "statement": "Clients must bind service operation, query language, document identifier, language, collection, date, pagination, and returned notice metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.eur-lex-webservice"
          ]
        },
        {
          "id": "fact.eu.eur-lex-webservice.boundary",
          "statement": "EUR-Lex metadata, consolidated texts, and search results have language, version, correction, and legal-effect context and do not replace the authoritative legal analysis.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.eur-lex-webservice"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eu.eur-lex-webservice",
          "url": "https://eur-lex.europa.eu/content/help/data-reuse/webservice.html",
          "title": "EUR-Lex webservice documentation",
          "publisher": "Publications Office of the European Union",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.europe-pmc-rest-api",
      "title": "Europe PMC REST API boundary",
      "summary": "Official documentation for Europe PMC search formats, result types and sorting. This document-only review does not verify authentication, paging limits, article content or reuse rights.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "europe-pmc-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T18:05:40.372Z",
      "contentHash": "sha256:131d123d8be96508688fe9d6b5f32bea2c2866de88fcc7af3a9f4476b9291d04",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T18:05:40.372Z"
      },
      "jsonPath": "/resources/public-data-apis/europe-pmc-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/europe-pmc-rest-api",
      "facts": [
        {
          "id": "fact.europe-pmc.rest-api.access",
          "statement": "The search module queries documented search fields; production and test fields endpoints are https://www.ebi.ac.uk/europepmc/webservices/rest/fields and https://www.ebi.ac.uk/europepmc/webservices/test/rest/fields.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.europe-pmc.rest-api"
          ]
        },
        {
          "id": "fact.europe-pmc.rest-api.authentication",
          "statement": "The default result type lite returns key metadata; idlist returns IDs and sources, while core returns full metadata including abstracts, full-text links and MeSH terms.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.europe-pmc.rest-api"
          ]
        },
        {
          "id": "fact.europe-pmc.rest-api.request",
          "statement": "Responses support XML or JSON; search also supports DC (Dublin Core in RDF/XML). Unspecified format defaults to XML, and a DC response always uses core result type.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.europe-pmc.rest-api"
          ]
        },
        {
          "id": "fact.europe-pmc.rest-api.boundary",
          "statement": "Search defaults to relevance order. The sort parameter accepts single-valued fields with asc or desc; query arguments sort_date:y and sort_cited:y alternatively request newest-first or most-cited-first results.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.europe-pmc.rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.europe-pmc.rest-api",
          "url": "https://europepmc.org/RestfulWebService",
          "title": "Europe PMC RESTful Web Service",
          "publisher": "Europe PMC",
          "observedAt": "2026-09-06T18:05:40.372Z"
        }
      ]
    },
    {
      "id": "resource.public-data.european-parliament-open-data-api",
      "title": "European Parliament Open Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for European Parliament Open Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "european-parliament-open-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:157bc9b09b21439748290947033eaa1de600114815032b0e61a5d07500ab515a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/european-parliament-open-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/european-parliament-open-data-api",
      "facts": [
        {
          "id": "fact.eu.parliament-open-data-api.access",
          "statement": "The European Parliament Open Data portal provides current API and downloadable dataset access for parliamentary entities, activities, documents, votes, meetings, and related vocabularies.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.parliament-open-data-api"
          ]
        },
        {
          "id": "fact.eu.parliament-open-data-api.authentication",
          "statement": "Public read access does not grant parliamentary identity, document filing, voting, amendment, authentication, or authority to represent an institution or member.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.parliament-open-data-api"
          ]
        },
        {
          "id": "fact.eu.parliament-open-data-api.request",
          "statement": "Clients must use the documented current API version and bind resource type, identifier, date, language, format, filters, and pagination while preserving canonical identifiers and provenance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.parliament-open-data-api"
          ]
        },
        {
          "id": "fact.eu.parliament-open-data-api.boundary",
          "statement": "Parliamentary data can be corrected, translated, consolidated, or procedurally contextual and does not alone establish legal effect, political intent, attendance meaning, or an authoritative interpretation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eu.parliament-open-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eu.parliament-open-data-api",
          "url": "https://data.europarl.europa.eu/en/developer-corner",
          "title": "European Parliament Open Data developer corner",
          "publisher": "European Parliament",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.europeana-apis",
      "title": "Europeana APIs boundary",
      "summary": "Official landing-page boundaries for Europeana Search, Record and IIIF APIs; this review does not establish request/paging limits or media reuse rights.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "europeana-apis",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-09T02:22:05Z",
      "contentHash": "sha256:47d1bc850d885491d9cfe5ed44e252d836ed35a0c8cefe83c167938fe9e44a7f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-16T02:22:05Z"
      },
      "jsonPath": "/resources/public-data-apis/europeana-apis.json",
      "htmlPath": "/resources/view/public-data-apis/europeana-apis",
      "facts": [
        {
          "id": "fact.europeana.apis.access",
          "statement": "The Europeana APIs landing page describes Search API for metadata records and media, Record API for detailed information about individual items, and IIIF for structured metadata and 2D-object visualization.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.europeana.apis"
          ]
        },
        {
          "id": "fact.europeana.apis.authentication",
          "statement": "The landing page says requesting an API key requires a free Europeana account; an API key is a credential and must not be embedded in public machine-readable records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.europeana.apis"
          ]
        },
        {
          "id": "fact.europeana.apis.request",
          "statement": "The landing page directs clients to API-specific documentation, but this bounded review does not establish query syntax, fields, profiles, paging or cursor behavior, or service limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.europeana.apis"
          ]
        },
        {
          "id": "fact.europeana.apis.boundary",
          "statement": "This review did not query collections or media and does not establish permission to retrieve or reuse heritage media; an Agent must verify the relevant API and item-rights terms before an action that depends on either permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.europeana.apis"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.europeana.apis",
          "url": "https://api.europeana.eu/en",
          "title": "Europeana APIs",
          "publisher": "Europeana Foundation",
          "observedAt": "2026-09-09T02:22:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.eurostat-dissemination-api",
      "title": "Eurostat Dissemination API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Eurostat Dissemination API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "eurostat-dissemination-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:018a961fdce6248500096ed91601b10ea65344921d84a5c10bde2e9b084a80c6",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/eurostat-dissemination-api.json",
      "htmlPath": "/resources/view/public-data-apis/eurostat-dissemination-api",
      "facts": [
        {
          "id": "fact.eurostat.dissemination-api.access",
          "statement": "Eurostat exposes Statistics, SDMX 3.0, SDMX 2.1, and Catalogue REST APIs for public data, metadata, and dataset discovery.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eurostat.dissemination-api"
          ]
        },
        {
          "id": "fact.eurostat.dissemination-api.authentication",
          "statement": "Statistics responses use JSON-stat 2.0 while SDMX endpoints offer several formats, so clients must declare and parse the selected representation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eurostat.dissemination-api"
          ]
        },
        {
          "id": "fact.eurostat.dissemination-api.request",
          "statement": "Large SDMX extractions can become asynchronous or be rejected for excessive size, making filtering and status handling part of complete retrieval.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eurostat.dissemination-api"
          ]
        },
        {
          "id": "fact.eurostat.dissemination-api.boundary",
          "statement": "Only the latest version of an observation may be available in some services; retrieval does not prove a stable historical snapshot or legal interpretation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.eurostat.dissemination-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.eurostat.dissemination-api",
          "url": "https://ec.europa.eu/eurostat/web/user-guides/data-browser/api-data-access/api-getting-started",
          "title": "API - Getting started",
          "publisher": "Eurostat",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.fcc-public-inspection-files-api",
      "title": "FCC Public Inspection Files API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for FCC Public Inspection Files API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "fcc-public-inspection-files-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:0b40dd04da95eedb896519957320221ae358d71590bdf9d33e848a00485adda8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/fcc-public-inspection-files-api.json",
      "htmlPath": "/resources/view/public-data-apis/fcc-public-inspection-files-api",
      "facts": [
        {
          "id": "fact.fcc.public-inspection-files-api.access",
          "statement": "The FCC Public Inspection Files site publishes free APIs for station, cable, DBS, SDARS, filing, political-file, and related public-file data used by the FCC's own site.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fcc.public-inspection-files-api"
          ]
        },
        {
          "id": "fact.fcc.public-inspection-files-api.authentication",
          "statement": "Public API use is subject to FCC terms and attribution and does not grant CORES login, FRN, filing, fee-payment, license, uploader, or account authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fcc.public-inspection-files-api"
          ]
        },
        {
          "id": "fact.fcc.public-inspection-files-api.request",
          "statement": "Clients must select the documented endpoint and bind facility, service, location, file, date, paging, and response parameters while preserving FCC identifiers and source links.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fcc.public-inspection-files-api"
          ]
        },
        {
          "id": "fact.fcc.public-inspection-files-api.boundary",
          "statement": "Public-file material is filed by regulated entities and can be incomplete, amended, delayed, or legally contextual; API presence does not prove FCC approval, compliance, ownership, or a final licensing decision.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fcc.public-inspection-files-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.fcc.public-inspection-files-api",
          "url": "https://publicfiles.fcc.gov/developer",
          "title": "FCC Public Inspection Files API Documentation",
          "publisher": "U.S. Federal Communications Commission",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.fdic-bankfind-api",
      "title": "FDIC BankFind Suite API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for FDIC BankFind Suite API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "fdic-bankfind-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:d91ffbaf90edb93c1f9c947ce84781ebf7efb80d86a52e7a33f580fcd888b213",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/fdic-bankfind-api.json",
      "htmlPath": "/resources/view/public-data-apis/fdic-bankfind-api",
      "facts": [
        {
          "id": "fact.fdic.bankfind-api.access",
          "statement": "The FDIC BankFind Suite API exposes public financial-institution, location, history, failure, summary, and financial-report datasets in JSON and CSV representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fdic.bankfind-api"
          ]
        },
        {
          "id": "fact.fdic.bankfind-api.authentication",
          "statement": "Documented public reads do not require bank account credentials and do not grant supervisory, examination, filing, insurance-determination, or dataset-modification authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fdic.bankfind-api"
          ]
        },
        {
          "id": "fact.fdic.bankfind-api.request",
          "statement": "Clients must select a dataset and bind search, filter, field, sort, limit, offset, and output-format parameters while retaining stable FDIC identifiers and paging all results.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fdic.bankfind-api"
          ]
        },
        {
          "id": "fact.fdic.bankfind-api.boundary",
          "statement": "Published records can reflect reporting periods, amendments, receivership events, aggregation, or disclosure rules and do not prove current solvency, safety, ownership, or investment suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fdic.bankfind-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.fdic.bankfind-api",
          "url": "https://api.fdic.gov/banks/docs/",
          "title": "FDIC BankFind Suite API documentation",
          "publisher": "Federal Deposit Insurance Corporation",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.federal-register-api",
      "title": "Federal Register API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Federal Register API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "federal-register-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:558b66ea028d63ae0a3698d93073e43eff54c81aa69bdac2bcf674d29151207f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/federal-register-api.json",
      "htmlPath": "/resources/view/public-data-apis/federal-register-api",
      "facts": [
        {
          "id": "fact.federal-register.api.access",
          "statement": "FederalRegister.gov exposes public API endpoints for searching and retrieving Federal Register document metadata and XML renditions without an API key.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.federal-register.api"
          ]
        },
        {
          "id": "fact.federal-register.api.authentication",
          "statement": "Clients must distinguish document search, agencies, public-inspection material, dates, and identifiers instead of assuming one undifferentiated legal corpus.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.federal-register.api"
          ]
        },
        {
          "id": "fact.federal-register.api.request",
          "statement": "FederalRegister.gov is an informational prototype and links to official PDF editions on govinfo.gov for verification.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.federal-register.api"
          ]
        },
        {
          "id": "fact.federal-register.api.boundary",
          "statement": "An API or XML result does not itself provide legal notice or replace the official edition, and legal research should verify the official source.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.federal-register.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.federal-register.api",
          "url": "https://www.federalregister.gov/developers/documentation/api/v1",
          "title": "Federal Register API Documentation",
          "publisher": "Office of the Federal Register and U.S. Government Publishing Office",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.fred-api",
      "title": "FRED economic data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for FRED economic data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "fred-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:1ba75dad6d7bdebf5f4a3802fb9ea840d653f7114a856c992bf98945129adfc1",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/fred-api.json",
      "htmlPath": "/resources/view/public-data-apis/fred-api",
      "facts": [
        {
          "id": "fact.fred.api.access",
          "statement": "FRED API endpoints expose economic series, observations, categories, releases, sources, tags, maps, and historical vintage dates.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fred.api"
          ]
        },
        {
          "id": "fact.fred.api.authentication",
          "statement": "API v1 requests require an application-specific key that must be kept outside public files and passed according to FRED documentation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fred.api"
          ]
        },
        {
          "id": "fact.fred.api.request",
          "statement": "FRED and ALFRED distinguish current observations from historical real-time vintages, so a query must declare the requested revision perspective.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fred.api"
          ]
        },
        {
          "id": "fact.fred.api.boundary",
          "statement": "FRED aggregates data from multiple sources and provides no guarantee of uninterrupted, error-free, complete, or investment-suitable results.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fred.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.fred.api",
          "url": "https://fred.stlouisfed.org/docs/api/fred/",
          "title": "FRED API",
          "publisher": "Federal Reserve Bank of St. Louis",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.gallica-api",
      "title": "Gallica document API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Gallica document API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "gallica-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:69acad4543fd2de64ca6c2618a27f6022cd1c924e388438ab95fb44a6dc60e9e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/gallica-api.json",
      "htmlPath": "/resources/view/public-data-apis/gallica-api",
      "facts": [
        {
          "id": "fact.gallica.api.access",
          "statement": "Bibliothèque nationale de France documents Gallica document metadata, search, OCR, table-of-contents, image, and digital-object services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gallica.api"
          ]
        },
        {
          "id": "fact.gallica.api.authentication",
          "statement": "Public reads do not grant catalog editing, document ownership, image rights, attribution, or Bibliothèque nationale de France authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gallica.api"
          ]
        },
        {
          "id": "fact.gallica.api.request",
          "statement": "Clients must bind ark identifier, service, query, page or region, representation, OCR, image size, and rights notice.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gallica.api"
          ]
        },
        {
          "id": "fact.gallica.api.boundary",
          "statement": "Digitized metadata, OCR, images, and attributions can be incomplete or revised and do not prove authenticity, legal title, transcription accuracy, or reuse permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gallica.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.gallica.api",
          "url": "https://api.bnf.fr/fr/api-document-de-gallica",
          "title": "Gallica document API documentation",
          "publisher": "Bibliothèque nationale de France",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.gbif-api",
      "title": "GBIF biodiversity API boundary",
      "summary": "GBIF documentation boundaries for API search, authentication, paging and asynchronous downloads. This review does not verify runtime access, occurrence accuracy, taxonomy completeness or reuse rights.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "gbif-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T20:09:47.872Z",
      "contentHash": "sha256:45bf3d944762843a7da3c3c3b0ab6d382bd399f6d5f60f7cc4df542aae1de1fe",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T20:09:47.872Z"
      },
      "jsonPath": "/resources/public-data-apis/gbif-api.json",
      "htmlPath": "/resources/view/public-data-apis/gbif-api",
      "facts": [
        {
          "id": "fact.gbif.api.access",
          "statement": "GBIF exposes REST services at https://api.gbif.org/; most queries return JSON. Its sections distinguish Registry, Species, Occurrence and Maps. Most APIs use v1, while Maps uses v2.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gbif.api"
          ]
        },
        {
          "id": "fact.gbif.api.authentication",
          "statement": "Most API use is anonymous, but POST, PUT, DELETE and some GET requests require HTTP Basic authentication. Creating an occurrence download requires a registered account's username, not its email, and password.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gbif.api",
            "source.gbif.api.downloads"
          ]
        },
        {
          "id": "fact.gbif.api.request",
          "statement": "Paged requests use limit and offset, with a service-specific page maximum. Repeated parameter values match any value; supported ranges use comma-separated bounds. Search throttling returns HTTP 429, and no fixed query rate is guaranteed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gbif.api"
          ]
        },
        {
          "id": "fact.gbif.api.boundary",
          "statement": "Occurrence downloads are asynchronous; a download key leads to the file link and DOI once ready. Without checklistKey the documented default is the obsolete GBIF Backbone Taxonomy; specify it for output and taxonomic filters. Verbatim extension tables are as-published, not processed by GBIF.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gbif.api.downloads"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.gbif.api",
          "url": "https://techdocs.gbif.org/en/openapi/",
          "title": "GBIF API Reference",
          "publisher": "Global Biodiversity Information Facility",
          "observedAt": "2026-09-06T20:09:47.872Z"
        },
        {
          "id": "source.gbif.api.downloads",
          "url": "https://techdocs.gbif.org/en/data-use/api-downloads",
          "title": "API Downloads",
          "publisher": "Global Biodiversity Information Facility",
          "observedAt": "2026-09-06T20:10:27.485Z"
        }
      ]
    },
    {
      "id": "resource.public-data.geoboundaries-api",
      "title": "geoBoundaries API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for geoBoundaries API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "geoboundaries-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:9e00db20489707db6337e549f6c79d61b4894e70220ce585d2e90dbee51dc18f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/geoboundaries-api.json",
      "htmlPath": "/resources/view/public-data-apis/geoboundaries-api",
      "facts": [
        {
          "id": "fact.geoboundaries.api.access",
          "statement": "William & Mary geoLab documents administrative-boundary metadata, release types, country and boundary-level selection, geometry downloads, and documented API responses.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.geoboundaries.api"
          ]
        },
        {
          "id": "fact.geoboundaries.api.authentication",
          "statement": "Public reads do not grant boundary, territory, sovereignty, jurisdiction, legal, mapping, or William & Mary authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.geoboundaries.api"
          ]
        },
        {
          "id": "fact.geoboundaries.api.request",
          "statement": "Clients must bind release, country code, administrative level, boundary type, geometry or metadata representation, version, and citation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.geoboundaries.api"
          ]
        },
        {
          "id": "fact.geoboundaries.api.boundary",
          "statement": "Boundary data can be generalized, disputed, incomplete, release-specific, or unsuitable for legal use and does not prove sovereignty, jurisdiction, address, ownership, or current administrative status.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.geoboundaries.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.geoboundaries.api",
          "url": "https://www.geoboundaries.org/api.html",
          "title": "geoBoundaries API documentation",
          "publisher": "William & Mary geoLab",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.geonames-web-services",
      "title": "GeoNames web-services boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for GeoNames web-services.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "geonames-web-services",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:238d167153f1c86b0c94d2730168c8609be888c52ac5a7c4fb1fe8e031dd9420",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/geonames-web-services.json",
      "htmlPath": "/resources/view/public-data-apis/geonames-web-services",
      "facts": [
        {
          "id": "fact.geonames.web.services.access",
          "statement": "GeoNames documents geographical names, search, hierarchy, postal codes, time zones, elevation, weather, and nearby-place services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.geonames.web.services"
          ]
        },
        {
          "id": "fact.geonames.web.services.authentication",
          "statement": "Requests require a GeoNames username and service limits; reads do not grant place naming, address, boundary, identity, routing, or government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.geonames.web.services"
          ]
        },
        {
          "id": "fact.geonames.web.services.request",
          "statement": "Clients must bind service, query or coordinates, feature class and code, country, language, result limit, username, style, and representation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.geonames.web.services"
          ]
        },
        {
          "id": "fact.geonames.web.services.boundary",
          "statement": "Crowdsourced geographical records can be incomplete, duplicated, approximate, disputed, or outdated and do not prove postal deliverability, jurisdiction, ownership, or safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.geonames.web.services"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.geonames.web.services",
          "url": "https://www.geonames.org/export/web-services.html",
          "title": "GeoNames web-services documentation",
          "publisher": "GeoNames",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.getty-vocabularies-lod",
      "title": "Getty Vocabularies linked-data services boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Getty Vocabularies linked-data services.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "getty-vocabularies-lod",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:53c9c65dd0e45bc251eb49c39b4140150a16846834f9277a4aa0ab47f109f032",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/getty-vocabularies-lod.json",
      "htmlPath": "/resources/view/public-data-apis/getty-vocabularies-lod",
      "facts": [
        {
          "id": "fact.getty.vocabularies-lod.access",
          "statement": "J. Paul Getty Trust documents AAT, TGN, ULAN, CONA, and IA linked-data downloads, mappings, and query access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.getty.vocabularies-lod"
          ]
        },
        {
          "id": "fact.getty.vocabularies-lod.authentication",
          "statement": "Public data access remains subject to Getty terms and does not grant vocabulary editing, identity, attribution, licensing, or curatorial authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.getty.vocabularies-lod"
          ]
        },
        {
          "id": "fact.getty.vocabularies-lod.request",
          "statement": "Clients must bind vocabulary, subject identifier, release, RDF representation, download, SPARQL query, and attribution requirements.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.getty.vocabularies-lod"
          ]
        },
        {
          "id": "fact.getty.vocabularies-lod.boundary",
          "statement": "Vocabulary concepts, names, mappings, and hierarchies can change or be context-dependent and do not prove identity, location, attribution, or scholarly consensus.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.getty.vocabularies-lod"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.getty.vocabularies-lod",
          "url": "https://www.getty.edu/research/tools/vocabularies/obtain/download.html",
          "title": "Getty Vocabularies linked-data services documentation",
          "publisher": "J. Paul Getty Trust",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.gleif-lei-api",
      "title": "GLEIF LEI API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for GLEIF LEI API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "gleif-lei-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:0092b80cfd37fd41819625379326007b30e3673a9d413041e0ae207bb8a54d37",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/gleif-lei-api.json",
      "htmlPath": "/resources/view/public-data-apis/gleif-lei-api",
      "facts": [
        {
          "id": "fact.gleif.lei-api.access",
          "statement": "The GLEIF API provides public full-text, field, filter, fuzzy-match, relationship, issuer, code-list, and mapped-identifier access over the complete LEI data pool and Golden Copy data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gleif.lei-api"
          ]
        },
        {
          "id": "fact.gleif.lei-api.authentication",
          "statement": "Public search does not require entity-account access and does not grant LEI issuance, renewal, challenge resolution, source-record mutation, payment, or organizational representation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gleif.lei-api"
          ]
        },
        {
          "id": "fact.gleif.lei-api.request",
          "statement": "Clients must bind JSON:API resource, identifier, filters, relationships, fields, sorting, page, and include options and tolerate additive attributes, relationships, and enumerations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gleif.lei-api"
          ]
        },
        {
          "id": "fact.gleif.lei-api.boundary",
          "statement": "An LEI record and relationship are issuer-reported reference data that can lapse, change, contain exceptions, or be challenged and do not prove beneficial ownership, creditworthiness, authorization, or transaction intent.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gleif.lei-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.gleif.lei-api",
          "url": "https://www.gleif.org/en/lei-data/gleif-api",
          "title": "GLEIF API",
          "publisher": "Global Legal Entity Identifier Foundation",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.go-module-proxy-api",
      "title": "Go module proxy protocol boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Go module proxy protocol.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "go-module-proxy-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:a3b90a4a57c995b513c9f7096d1524d7eeb8c01e32ed4a9fc81b4e3ef57836b8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/go-module-proxy-api.json",
      "htmlPath": "/resources/view/public-data-apis/go-module-proxy-api",
      "facts": [
        {
          "id": "fact.go.module-proxy-api.access",
          "statement": "The Go Project documents module version lists, metadata, module files, checksums, proxy fallback, and privacy controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.go.module-proxy-api"
          ]
        },
        {
          "id": "fact.go.module-proxy-api.authentication",
          "statement": "Public proxy reads are separate from repository or proxy administration and do not grant module ownership, publication, source, or Go Project authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.go.module-proxy-api"
          ]
        },
        {
          "id": "fact.go.module-proxy-api.request",
          "statement": "Clients must bind module path escaping, version, info, mod, zip, list, environment fallback, checksum, and private-module rules.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.go.module-proxy-api"
          ]
        },
        {
          "id": "fact.go.module-proxy-api.boundary",
          "statement": "Proxy availability and checksums establish distribution bytes under a path/version, not author identity, code safety, licensing, maintenance, or compatibility.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.go.module-proxy-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.go.module-proxy-api",
          "url": "https://go.dev/ref/mod#goproxy-protocol",
          "title": "Go module proxy protocol documentation",
          "publisher": "The Go Project",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.google-public-dns-doh",
      "title": "Google Public DNS-over-HTTPS boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Google Public DNS-over-HTTPS.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "google-public-dns-doh",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:0b27a43ca97c0c029aafffaf9ef8e01820940230fdf9175140c3da5d657fcafb",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/google-public-dns-doh.json",
      "htmlPath": "/resources/view/public-data-apis/google-public-dns-doh",
      "facts": [
        {
          "id": "fact.google.public.dns.doh.access",
          "statement": "Google documents DNS-over-HTTPS JSON and wire-format query interfaces and documented response fields.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.public.dns.doh"
          ]
        },
        {
          "id": "fact.google.public.dns.doh.authentication",
          "statement": "Public resolution does not grant DNS-zone, domain, registrar, resolver-policy, cache, or Google administrative authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.public.dns.doh"
          ]
        },
        {
          "id": "fact.google.public.dns.doh.request",
          "statement": "Clients must bind name, type, DNSSEC flags, wire or JSON representation, HTTP method, cache controls, and response code.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.public.dns.doh"
          ]
        },
        {
          "id": "fact.google.public.dns.doh.boundary",
          "statement": "DNS responses are time-dependent and cacheable and do not prove domain ownership, service reachability, content safety, identity, or future resolution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.google.public.dns.doh"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.google.public.dns.doh",
          "url": "https://developers.google.com/speed/public-dns/docs/doh",
          "title": "Google Public DNS-over-HTTPS documentation",
          "publisher": "Google",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.govinfo-api",
      "title": "GovInfo API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for GovInfo API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "govinfo-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:28d6e10009ec6e158e1fa4eb375a82d9385f3ac8fc88503588a27ad68ce62fa4",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/govinfo-api.json",
      "htmlPath": "/resources/view/public-data-apis/govinfo-api",
      "facts": [
        {
          "id": "fact.govinfo.api.access",
          "statement": "GovInfo publishes API documentation for discovering and retrieving U.S. Government publication collections, packages, granules, summaries, and content links.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.govinfo.api"
          ]
        },
        {
          "id": "fact.govinfo.api.authentication",
          "statement": "Clients must use the documented api.data.gov authentication and rate boundaries and keep any assigned key out of public records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.govinfo.api"
          ]
        },
        {
          "id": "fact.govinfo.api.request",
          "statement": "Collection, package, and granule identifiers define different levels of the publication hierarchy and must not be interchanged.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.govinfo.api"
          ]
        },
        {
          "id": "fact.govinfo.api.boundary",
          "statement": "Metadata or content retrieval does not remove edition, authenticity, coverage, copyright, or legal-status verification requirements for the underlying publication.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.govinfo.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.govinfo.api",
          "url": "https://api.govinfo.gov/docs/",
          "title": "GovInfo API Documentation",
          "publisher": "U.S. Government Publishing Office",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.gsa-per-diem-api",
      "title": "GSA Per Diem API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for GSA Per Diem API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "gsa-per-diem-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:b4e0cdc83a72224bef9c84993757a92a4ca80a19fcff35a283e69c16202c91be",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/gsa-per-diem-api.json",
      "htmlPath": "/resources/view/public-data-apis/gsa-per-diem-api",
      "facts": [
        {
          "id": "fact.gsa.per-diem-api.access",
          "statement": "U.S. General Services Administration documents federal lodging and meals-and-incidental-expense rates by location and fiscal year.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gsa.per-diem-api"
          ]
        },
        {
          "id": "fact.gsa.per-diem-api.authentication",
          "statement": "Requests use a data.gov API key that must remain secret; access does not grant travel authorization, reimbursement, accounting, or GSA policy authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gsa.per-diem-api"
          ]
        },
        {
          "id": "fact.gsa.per-diem-api.request",
          "statement": "Clients must bind fiscal year, city, state, ZIP code, rate type, endpoint, and returned effective periods.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gsa.per-diem-api"
          ]
        },
        {
          "id": "fact.gsa.per-diem-api.boundary",
          "statement": "Published rates require policy and trip context and do not prove traveler eligibility, allowable expense, payment, or the rate applicable to every location.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gsa.per-diem-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.gsa.per-diem-api",
          "url": "https://open.gsa.gov/api/perdiem/",
          "title": "GSA Per Diem API documentation",
          "publisher": "U.S. General Services Administration",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.gwas-catalog-api",
      "title": "GWAS Catalog API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for GWAS Catalog API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "gwas-catalog-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:376dcb4c040e77e477821ff4c1d72c2673142953a8d5cea1733d36d2e3aa7303",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/gwas-catalog-api.json",
      "htmlPath": "/resources/view/public-data-apis/gwas-catalog-api",
      "facts": [
        {
          "id": "fact.ebi.gwas-catalog-api.access",
          "statement": "The GWAS Catalog API exposes studies, associations, variants, traits, ancestry, publications, summary-statistics metadata, and related identifiers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.gwas-catalog-api"
          ]
        },
        {
          "id": "fact.ebi.gwas-catalog-api.authentication",
          "statement": "Public reads require no user credential and do not grant study submission, curation, controlled-data, clinical, diagnostic, or ancestry-inference authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.gwas-catalog-api"
          ]
        },
        {
          "id": "fact.ebi.gwas-catalog-api.request",
          "statement": "Clients must bind resource type, stable identifiers, trait or genomic filters, fields, sorting, paging, and release context and follow linked study and publication evidence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.gwas-catalog-api"
          ]
        },
        {
          "id": "fact.ebi.gwas-catalog-api.boundary",
          "statement": "Associations are population- and analysis-dependent statistical findings and do not prove causation, individual risk, diagnosis, treatment response, or portability across populations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.gwas-catalog-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.gwas-catalog-api",
          "url": "https://www.ebi.ac.uk/gwas/rest/api/v2/docs",
          "title": "GWAS Catalog REST API v2 documentation",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.hackage-api",
      "title": "Hackage API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Hackage API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "hackage-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:e484628a3027f47d90e41500d7084b3e7bec2e3b54680e86073fe3cf37797649",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/hackage-api.json",
      "htmlPath": "/resources/view/public-data-apis/hackage-api",
      "facts": [
        {
          "id": "fact.hackage.api.access",
          "statement": "Hackage documents Haskell package, version, metadata, dependency, documentation, revision, and distribution endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hackage.api"
          ]
        },
        {
          "id": "fact.hackage.api.authentication",
          "statement": "Public reads are separate from authenticated upload, maintainership, metadata revision, deprecation, or trustee operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hackage.api"
          ]
        },
        {
          "id": "fact.hackage.api.request",
          "statement": "Clients must bind package name, version, representation, endpoint, revision, range, and cache behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hackage.api"
          ]
        },
        {
          "id": "fact.hackage.api.boundary",
          "statement": "Package records are contributor-managed and do not prove author identity, code safety, build success, license compatibility, or maintenance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hackage.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.hackage.api",
          "url": "https://hackage.haskell.org/api",
          "title": "Hackage API documentation",
          "publisher": "Hackage",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.harvard-art-museums-api",
      "title": "Harvard Art Museums API boundary",
      "summary": "Official-source access, required API-key, JSON paging, image-availability, and interpretation boundaries for Harvard Art Museums API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "harvard-art-museums-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-23T02:13:17Z",
      "contentHash": "sha256:4395d822db95fed9e9463aa072bcaee977c5f3e7b99c110ab1b4d76bdac85181",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-30T02:13:17Z"
      },
      "jsonPath": "/resources/public-data-apis/harvard-art-museums-api.json",
      "htmlPath": "/resources/view/public-data-apis/harvard-art-museums-api",
      "facts": [
        {
          "id": "fact.harvard-art-museums.api.access",
          "statement": "Harvard Art Museums documents a REST-style API at https://api.harvardartmuseums.org that returns JSON-formatted collection data. A request names a documented resource; the reviewed core resources include Object, Person, Exhibition, Publication, and Gallery. This does not establish complete collection coverage or record accuracy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.harvard-art-museums.api",
            "source.harvard-art-museums.api-docs"
          ]
        },
        {
          "id": "fact.harvard-art-museums.api.authentication",
          "statement": "Harvard Art Museums says every API request must include the apikey parameter and a valid API key; missing, invalid, or bad keys return 401. The documentation links a key-request form but does not establish a key scope, quota, duration, or permission to edit records, so an Agent must obtain and handle its own authorized key and must not infer broader authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.harvard-art-museums.api",
            "source.harvard-art-museums.api-docs"
          ]
        },
        {
          "id": "fact.harvard-art-museums.api.request",
          "statement": "The linked documentation says JSON responses include info, records, and optional aggregations. Default page size is 10 and size can be increased to 100; page selects a later page and response info may contain next and prev URLs. It documents 404 for an unsupported resource but does not establish a rate limit, complete endpoint/filter/field contract, or live service behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.harvard-art-museums.api-docs"
          ]
        },
        {
          "id": "fact.harvard-art-museums.api.boundary",
          "statement": "The linked documentation says some datasets contain image URLs and describes IIIF image and presentation services, but image URLs for rights-restricted objects are excluded for most API users. It does not grant an Agent permission to query objects or images here, download media, treat a record as complete or authentic, or reuse any object, image, or IIIF asset without separately applicable rights and terms.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.harvard-art-museums.api-docs"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.harvard-art-museums.api",
          "url": "https://harvardartmuseums.org/collections/api",
          "title": "Harvard Art Museums API documentation",
          "publisher": "Harvard Art Museums",
          "observedAt": "2026-09-23T02:13:16Z"
        },
        {
          "id": "source.harvard-art-museums.api-docs",
          "url": "https://github.com/harvardartmuseums/api-docs",
          "title": "Harvard Art Museums API documentation repository",
          "publisher": "Harvard Art Museums",
          "observedAt": "2026-09-23T02:13:17Z"
        }
      ]
    },
    {
      "id": "resource.public-data.hdx-ckan-api",
      "title": "Humanitarian Data Exchange CKAN API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Humanitarian Data Exchange CKAN API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "hdx-ckan-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:a423466ce060e0ab1fd43767f1609b52de918b9442845a75e76071c666237f20",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/hdx-ckan-api.json",
      "htmlPath": "/resources/view/public-data-apis/hdx-ckan-api",
      "facts": [
        {
          "id": "fact.hdx.ckan-api.access",
          "statement": "The Humanitarian Data Exchange exposes CKAN API actions for dataset, group, organization, tag, and resource discovery over public humanitarian-data metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hdx.ckan-api"
          ]
        },
        {
          "id": "fact.hdx.ckan-api.authentication",
          "statement": "Anonymous public reads do not grant access to private or sensitive datasets, contributor accounts, mutation actions, or restricted download credentials.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hdx.ckan-api"
          ]
        },
        {
          "id": "fact.hdx.ckan-api.request",
          "statement": "Clients must select an action and bind search query, filters, sorting, rows, start offset, identifiers, and resource format and follow returned counts and dataset metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hdx.ckan-api"
          ]
        },
        {
          "id": "fact.hdx.ckan-api.boundary",
          "statement": "HDX hosts data from many contributors with different licenses, update cycles, methods, and sensitivity review; listing does not prove completeness, accuracy, safety, or endorsement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hdx.ckan-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.hdx.ckan-api",
          "url": "https://data.humdata.org/api/3",
          "title": "HDX CKAN API",
          "publisher": "United Nations Office for the Coordination of Humanitarian Affairs",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.homebrew-formula-api",
      "title": "Homebrew Formulae API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Homebrew Formulae API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "homebrew-formula-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:9721764de7874cc4224ab942af72f7c072c03eaef54406b5fc201b21379f12e0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/homebrew-formula-api.json",
      "htmlPath": "/resources/view/public-data-apis/homebrew-formula-api",
      "facts": [
        {
          "id": "fact.homebrew.formula.api.access",
          "statement": "Homebrew documents formula, cask, version, dependency, bottle, variation, and analytics JSON records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.homebrew.formula.api"
          ]
        },
        {
          "id": "fact.homebrew.formula.api.authentication",
          "statement": "Public reads do not grant formula or cask maintenance, tap publication, bottle signing, installation, or Homebrew authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.homebrew.formula.api"
          ]
        },
        {
          "id": "fact.homebrew.formula.api.request",
          "statement": "Clients must bind formula or cask token, endpoint family, architecture or operating-system variation, analytics period, and cache state.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.homebrew.formula.api"
          ]
        },
        {
          "id": "fact.homebrew.formula.api.boundary",
          "statement": "Registry data and analytics can change and do not prove software safety, compatibility, maintenance, popularity quality, or installation success.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.homebrew.formula.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.homebrew.formula.api",
          "url": "https://formulae.brew.sh/docs/api/",
          "title": "Homebrew Formulae API documentation",
          "publisher": "Homebrew",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.hud-user-api",
      "title": "HUD User FMR API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for HUD User FMR API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "hud-user-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:6376c1f4b8f35b155789014991bc5d51f0595410e9e051d640bf2ee6f1916389",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/hud-user-api.json",
      "htmlPath": "/resources/view/public-data-apis/hud-user-api",
      "facts": [
        {
          "id": "fact.hud.user.api.access",
          "statement": "U.S. Department of Housing and Urban Development documents Fair Market Rent and related HUD User geography, year, area, and rent data through documented APIs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hud.user.api"
          ]
        },
        {
          "id": "fact.hud.user.api.authentication",
          "statement": "Requests can require a documented token; reads do not grant housing, eligibility, rent, payment, program, or HUD decision authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hud.user.api"
          ]
        },
        {
          "id": "fact.hud.user.api.request",
          "statement": "Clients must bind area or geography identifier, year, bedroom count, endpoint, token, response field, and publication vintage.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hud.user.api"
          ]
        },
        {
          "id": "fact.hud.user.api.boundary",
          "statement": "Published values require program, geography, vintage, and eligibility context and do not prove a lease rate, entitlement, affordability, payment, or legal limit.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.hud.user.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.hud.user.api",
          "url": "https://www.huduser.gov/portal/dataset/fmr-api.html",
          "title": "HUD User FMR API documentation",
          "publisher": "U.S. Department of Housing and Urban Development",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.iana-media-types-registry",
      "title": "IANA media-types registry boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for IANA media-types registry.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "iana-media-types-registry",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:46232fb9aec1ea4825c59853c9c5123e9908059f164d76ac23004b64f2b2f84c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/iana-media-types-registry.json",
      "htmlPath": "/resources/view/public-data-apis/iana-media-types-registry",
      "facts": [
        {
          "id": "fact.iana.media.types.registry.access",
          "statement": "Internet Assigned Numbers Authority documents registered top-level media types, subtypes, templates, references, and registration metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iana.media.types.registry"
          ]
        },
        {
          "id": "fact.iana.media.types.registry.authentication",
          "statement": "Public reads do not grant type registration, content validation, protocol conformance, vendor authority, or IANA administrative authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iana.media.types.registry"
          ]
        },
        {
          "id": "fact.iana.media.types.registry.request",
          "statement": "Clients must bind top-level type, subtype, registration tree, reference, template, encoding consideration, and registry update state.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iana.media.types.registry"
          ]
        },
        {
          "id": "fact.iana.media.types.registry.boundary",
          "statement": "Registry presence identifies a registered name and reference; it does not prove a payload is valid, safe, interoperable, correctly labeled, or current in every implementation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iana.media.types.registry"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.iana.media.types.registry",
          "url": "https://www.iana.org/assignments/media-types/media-types.xhtml",
          "title": "IANA media-types registry documentation",
          "publisher": "Internet Assigned Numbers Authority",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.iana-rdap-bootstrap",
      "title": "IANA RDAP bootstrap-data boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for IANA RDAP bootstrap-data.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "iana-rdap-bootstrap",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:352a7bdc4c2d1f0029c285a39ffa7ae2484b018a43c72eaddaabf265d1375ec6",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/iana-rdap-bootstrap.json",
      "htmlPath": "/resources/view/public-data-apis/iana-rdap-bootstrap",
      "facts": [
        {
          "id": "fact.iana.rdap.bootstrap.access",
          "statement": "Internet Assigned Numbers Authority documents RDAP bootstrap registries for DNS, IPv4, IPv6, autonomous-system numbers, and object tags.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iana.rdap.bootstrap"
          ]
        },
        {
          "id": "fact.iana.rdap.bootstrap.authentication",
          "statement": "Public reads do not grant domain, address, ASN, registry, registrar, allocation, or IANA administrative authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iana.rdap.bootstrap"
          ]
        },
        {
          "id": "fact.iana.rdap.bootstrap.request",
          "statement": "Clients must bind bootstrap registry, service array, identifier range or suffix, publication time, representation, and client fallback.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iana.rdap.bootstrap"
          ]
        },
        {
          "id": "fact.iana.rdap.bootstrap.boundary",
          "statement": "Bootstrap data identifies authoritative RDAP services; it does not prove current registration details, ownership, routing, authorization, or reachability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iana.rdap.bootstrap"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.iana.rdap.bootstrap",
          "url": "https://data.iana.org/rdap/",
          "title": "IANA RDAP bootstrap-data documentation",
          "publisher": "Internet Assigned Numbers Authority",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.iati-datastore-api",
      "title": "IATI Datastore API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for IATI Datastore API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "iati-datastore-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:2e6083e3e3eda54868a456cda44f12adbdc673583066d4ae1744e4968cb231c6",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/iati-datastore-api.json",
      "htmlPath": "/resources/view/public-data-apis/iati-datastore-api",
      "facts": [
        {
          "id": "fact.iati.datastore-api.access",
          "statement": "IATI Datastore provides Solr-backed search over published IATI activity and organisation data that is not classified as critically invalid by the processing pipeline.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iati.datastore-api"
          ]
        },
        {
          "id": "fact.iati.datastore-api.authentication",
          "statement": "Public search does not grant publisher-account access, source-file mutation, validation approval, reporting authority, or access to data that was never published.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iati.datastore-api"
          ]
        },
        {
          "id": "fact.iati.datastore-api.request",
          "statement": "Clients must use the documented activity or organisation core, query syntax, filters, fields, sorting, rows, start offset, facets, and output format and manage large result sets.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iati.datastore-api"
          ]
        },
        {
          "id": "fact.iati.datastore-api.boundary",
          "statement": "IATI data is publisher-reported and can be incomplete, duplicated, delayed, differently scoped, or later corrected; datastore inclusion is not an audit or impact verification.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.iati.datastore-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.iati.datastore-api",
          "url": "https://developer.iatistandard.org/api-details",
          "title": "IATI Datastore API Details",
          "publisher": "International Aid Transparency Initiative",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ibge-data-service-api",
      "title": "IBGE Data Service API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for IBGE Data Service API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ibge-data-service-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:47ec6fb09439d8f16ef2c240645f39b611cd3a65de56c7e97b12eceb68d0f2ed",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/ibge-data-service-api.json",
      "htmlPath": "/resources/view/public-data-apis/ibge-data-service-api",
      "facts": [
        {
          "id": "fact.ibge.data-service-api.access",
          "statement": "IBGE's data-service catalog exposes official aggregate statistics, administrative localities, geographic meshes, classifications, metadata, surveys, publications, countries, news, and geodetic services through versioned APIs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ibge.data-service-api"
          ]
        },
        {
          "id": "fact.ibge.data-service-api.authentication",
          "statement": "Public reads do not require authority over IBGE collection, respondent data, statistical releases, geographic standards, or service administration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ibge.data-service-api"
          ]
        },
        {
          "id": "fact.ibge.data-service-api.request",
          "statement": "Clients must choose the exact API and version and bind its aggregate, locality, classification, survey, product, period, variable, hierarchy, format, and pagination parameters.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ibge.data-service-api"
          ]
        },
        {
          "id": "fact.ibge.data-service-api.boundary",
          "statement": "IBGE outputs can use different vintages, territorial hierarchies, classifications, sampling, suppression, revisions, and methodologies and do not prove individual identity or unchanged local conditions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ibge.data-service-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ibge.data-service-api",
          "url": "https://servicodados.ibge.gov.br/api/docs",
          "title": "IBGE Data Service API",
          "publisher": "Brazilian Institute of Geography and Statistics",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ilostat-sdmx-api",
      "title": "ILOSTAT SDMX API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for ILOSTAT SDMX API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ilostat-sdmx-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:b7b4383c73caefb182b1ded17f63c68d5b72aec32041cbd5f387f0fe10f2444e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/ilostat-sdmx-api.json",
      "htmlPath": "/resources/view/public-data-apis/ilostat-sdmx-api",
      "facts": [
        {
          "id": "fact.ilo.ilostat-sdmx-api.access",
          "statement": "ILOSTAT makes labour-statistics data and structures available through SDMX tools and a web-service contract with standard SDMX representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ilo.ilostat-sdmx-api"
          ]
        },
        {
          "id": "fact.ilo.ilostat-sdmx-api.authentication",
          "statement": "Clients must resolve dataflow, structure, indicator, reference area, source, sex, classif dimensions, frequency, and time before interpreting an observation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ilo.ilostat-sdmx-api"
          ]
        },
        {
          "id": "fact.ilo.ilostat-sdmx-api.request",
          "statement": "Conditional requests, explicit Accept headers, compression, and narrow keys help avoid stale or unnecessarily large responses.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ilo.ilostat-sdmx-api"
          ]
        },
        {
          "id": "fact.ilo.ilostat-sdmx-api.boundary",
          "statement": "Labour indicators can differ by source, estimation method, definition, coverage, and revision and do not prove individual employment conditions or cross-country equivalence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ilo.ilostat-sdmx-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ilo.ilostat-sdmx-api",
          "url": "https://ilostat.ilo.org/resources/sdmx-tools/",
          "title": "ILOSTAT SDMX Tools",
          "publisher": "International Labour Organization",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.imf-datamapper-api",
      "title": "IMF DataMapper API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for IMF DataMapper API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "imf-datamapper-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:9a15f097a5029a8acf8159b2fbf1863a71c3c2c66eae792f905070a0d9aea70b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/imf-datamapper-api.json",
      "htmlPath": "/resources/view/public-data-apis/imf-datamapper-api",
      "facts": [
        {
          "id": "fact.imf.datamapper-api.access",
          "statement": "IMF DataMapper API v2 exposes indicator metadata, countries, regions, analytical groups, and time-series values used by the DataMapper application.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.imf.datamapper-api"
          ]
        },
        {
          "id": "fact.imf.datamapper-api.authentication",
          "statement": "Documented public reads do not require a user account, but public availability does not grant write access, embargoed data, institutional endorsement, or support guarantees.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.imf.datamapper-api"
          ]
        },
        {
          "id": "fact.imf.datamapper-api.request",
          "statement": "Clients must resolve indicator and entity codes, year selection, grouping, and response shape and must preserve units, scales, source notes, and projections metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.imf.datamapper-api"
          ]
        },
        {
          "id": "fact.imf.datamapper-api.boundary",
          "statement": "IMF values can be projections, estimates, revisions, model-dependent, or incomparable across vintages and do not constitute financial advice or proof of policy effects.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.imf.datamapper-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.imf.datamapper-api",
          "url": "https://www.imf.org/external/datamapper/api/help",
          "title": "IMF DataMapper API",
          "publisher": "International Monetary Fund",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.inaturalist-api",
      "title": "iNaturalist API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for iNaturalist API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "inaturalist-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:97c9cd89c14ded2b514fe3d7b785b8f32631628b499bac07e149bbbeac2417cc",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/inaturalist-api.json",
      "htmlPath": "/resources/view/public-data-apis/inaturalist-api",
      "facts": [
        {
          "id": "fact.inaturalist.api.access",
          "statement": "The iNaturalist API exposes public observations, taxa, identifications, places, projects, users, annotations, and search metadata through versioned endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.inaturalist.api"
          ]
        },
        {
          "id": "fact.inaturalist.api.authentication",
          "statement": "Public reads are separate from OAuth-protected contribution and account operations; access does not grant observer identity, curator, research-grade, or platform authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.inaturalist.api"
          ]
        },
        {
          "id": "fact.inaturalist.api.request",
          "statement": "Clients must bind taxon, place, date, quality grade, geoprivacy-compatible location, fields, sorting, paging, and rate guidance and preserve observation and license metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.inaturalist.api"
          ]
        },
        {
          "id": "fact.inaturalist.api.boundary",
          "statement": "Observations and community identifications can be misidentified, obscured, captive, duplicated, or revised and do not prove species presence at an exact private location or expert validation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.inaturalist.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.inaturalist.api",
          "url": "https://api.inaturalist.org/v1/docs/",
          "title": "iNaturalist API v1 documentation",
          "publisher": "iNaturalist",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.india-data-gov-api",
      "title": "India Open Government Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for India Open Government Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "india-data-gov-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:cf95bf10ce471a8a09a06d6c9aac7015b1f4624b5c85462147814b5e8b59c5a7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/india-data-gov-api.json",
      "htmlPath": "/resources/view/public-data-apis/india-data-gov-api",
      "facts": [
        {
          "id": "fact.in.data-gov-api.access",
          "statement": "India's Open Government Data platform exposes catalog and resource APIs for public datasets contributed by ministries, departments, states, and public bodies.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.in.data-gov-api"
          ]
        },
        {
          "id": "fact.in.data-gov-api.authentication",
          "statement": "Resource calls can require a registered API key, which must not be embedded in public artifacts; access does not grant publisher, source-system, or government-representation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.in.data-gov-api"
          ]
        },
        {
          "id": "fact.in.data-gov-api.request",
          "statement": "Clients must bind resource identifier, filters, fields, sorting, offset, limit, format, and API key where required and follow each catalog entry's update and license metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.in.data-gov-api"
          ]
        },
        {
          "id": "fact.in.data-gov-api.boundary",
          "statement": "Publisher-contributed datasets can be stale, incomplete, differently scoped, or unavailable and do not prove official endorsement, current conditions, legal effect, or cross-dataset comparability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.in.data-gov-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.in.data-gov-api",
          "url": "https://data.gov.in/apis",
          "title": "India Open Government Data APIs",
          "publisher": "Government of India",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.indonesia-bps-api",
      "title": "BPS WebAPI boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for BPS WebAPI.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "indonesia-bps-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:212116f1f04251546ca1e8fbff83751f214651afb70d23dbd3251ac44618c4de",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/indonesia-bps-api.json",
      "htmlPath": "/resources/view/public-data-apis/indonesia-bps-api",
      "facts": [
        {
          "id": "fact.indonesia.bps-api.access",
          "statement": "Statistics Indonesia documents Indonesian statistical publications, datasets, indicators, tables, domains, and metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.indonesia.bps-api"
          ]
        },
        {
          "id": "fact.indonesia.bps-api.authentication",
          "statement": "Requests use a registered API key that must remain secret; access does not grant respondent, publication, correction, or Statistics Indonesia authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.indonesia.bps-api"
          ]
        },
        {
          "id": "fact.indonesia.bps-api.request",
          "statement": "Clients must bind domain, model, variable, indicator, subject, year, language, page, and API key.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.indonesia.bps-api"
          ]
        },
        {
          "id": "fact.indonesia.bps-api.boundary",
          "statement": "BPS statistics have geographic, methodological, revision, suppression, and publication context and do not prove individual status or causality.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.indonesia.bps-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.indonesia.bps-api",
          "url": "https://webapi.bps.go.id/developer/",
          "title": "BPS WebAPI documentation",
          "publisher": "Statistics Indonesia",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.inegi-indicators-api",
      "title": "INEGI Indicators API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for INEGI Indicators API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "inegi-indicators-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:09b652a7ac8701e266ebd2aebee5b1c314b0e6d9b2cdaef262a19614300d8203",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/inegi-indicators-api.json",
      "htmlPath": "/resources/view/public-data-apis/inegi-indicators-api",
      "facts": [
        {
          "id": "fact.inegi.indicators-api.access",
          "statement": "INEGI Indicators API 2.0 exposes indicator observations and metadata at national, state, and municipality levels in JSON, JSONP, XML, PC-Axis, and SDMX representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.inegi.indicators-api"
          ]
        },
        {
          "id": "fact.inegi.indicators-api.authentication",
          "statement": "Requests require a registered token, which is a credential and must not be embedded in public resources; API access does not confer statistical-publisher or data-modification authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.inegi.indicators-api"
          ]
        },
        {
          "id": "fact.inegi.indicators-api.request",
          "statement": "Clients must bind indicator or metadata code, language, geographic area, latest-versus-history choice, dissemination source, version, token, and output format.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.inegi.indicators-api"
          ]
        },
        {
          "id": "fact.inegi.indicators-api.boundary",
          "statement": "Observations carry frequency, unit, multiplier, source, notes, status, exceptions, and update metadata and can be revised or unavailable; they do not prove causation or individual circumstances.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.inegi.indicators-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.inegi.indicators-api",
          "url": "https://en.www.inegi.org.mx/servicios/api_indicadores.html",
          "title": "INEGI Indicator Bank API",
          "publisher": "National Institute of Statistics and Geography of Mexico",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.insee-sdmx-api",
      "title": "INSEE SDMX API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for INSEE SDMX API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "insee-sdmx-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:c445286dc39694345eb679e716c3cdf5c06c182faefb4da7c2823a4c7a6de998",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/insee-sdmx-api.json",
      "htmlPath": "/resources/view/public-data-apis/insee-sdmx-api",
      "facts": [
        {
          "id": "fact.insee.sdmx-api.access",
          "statement": "INSEE's free REST service provides BDM time-series data, structural metadata, and release calendars using SDMX 2.1, including simplified retrieval by idbank.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.insee.sdmx-api"
          ]
        },
        {
          "id": "fact.insee.sdmx-api.authentication",
          "statement": "Direct public BDM access does not require a portal account, while subscription modes and separate INSEE APIs can have their own access terms and do not grant publication or statistical-authority rights.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.insee.sdmx-api"
          ]
        },
        {
          "id": "fact.insee.sdmx-api.request",
          "statement": "Clients must bind the dataflow or series identifiers, dimensions, date range, detail, format, and response limits; simplified idbank calls accept at most four hundred series.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.insee.sdmx-api"
          ]
        },
        {
          "id": "fact.insee.sdmx-api.boundary",
          "statement": "INSEE series can be revised, adjusted, estimated, re-based, territorially scoped, or definition-dependent and do not prove individual facts, causation, or unchanged current conditions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.insee.sdmx-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.insee.sdmx-api",
          "url": "https://www.insee.fr/en/information/2868055",
          "title": "INSEE SDMX Web Service",
          "publisher": "French National Institute of Statistics and Economic Studies",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.intact-molecular-interactions-api",
      "title": "IntAct molecular interactions API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for IntAct molecular interactions API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "intact-molecular-interactions-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:d6c32c425e9dd7b141178a48404caf49869770ef5a2dbf2d30b05237e940a72f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/intact-molecular-interactions-api.json",
      "htmlPath": "/resources/view/public-data-apis/intact-molecular-interactions-api",
      "facts": [
        {
          "id": "fact.ebi.intact-api.access",
          "statement": "IntAct web services expose curated molecular-interaction records, participants, experiments, publications, controlled vocabularies, and identifier-based queries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.intact-api"
          ]
        },
        {
          "id": "fact.ebi.intact-api.authentication",
          "statement": "Public reads require no user credential and do not grant data deposition, curator, embargo, publication, or biological-validation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.intact-api"
          ]
        },
        {
          "id": "fact.ebi.intact-api.request",
          "statement": "Clients must bind molecule or publication identifiers, interaction fields, species, detection methods, paging, and supported representations and preserve experiment and source references.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.intact-api"
          ]
        },
        {
          "id": "fact.ebi.intact-api.boundary",
          "statement": "Interaction records summarize published experiments and can be context-specific, negative, conflicting, or re-curated and do not prove in-vivo function, causation, therapeutic effect, or clinical relevance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.intact-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.intact-api",
          "url": "https://www.ebi.ac.uk/intact/ws/",
          "title": "IntAct web services",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.interpro-api",
      "title": "InterPro API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for InterPro API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "interpro-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:17e592a1219815372c989080d972f0196a331452c1b0bdb23c72e03e4956efe1",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/interpro-api.json",
      "htmlPath": "/resources/view/public-data-apis/interpro-api",
      "facts": [
        {
          "id": "fact.ebi.interpro-api.access",
          "statement": "The InterPro API exposes protein family, domain, site, signature, protein, structure, proteome, taxonomy, and entry relationship data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.interpro-api"
          ]
        },
        {
          "id": "fact.ebi.interpro-api.authentication",
          "statement": "Documented public reads require no user credential and do not grant member-database curation, annotation submission, release, or biological-interpretation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.interpro-api"
          ]
        },
        {
          "id": "fact.ebi.interpro-api.request",
          "statement": "Clients must bind entry or member database, accession, protein, taxonomy, structure, page size, cursor, fields, and output representation and follow release-specific identifiers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.interpro-api"
          ]
        },
        {
          "id": "fact.ebi.interpro-api.boundary",
          "statement": "Integrated signatures and predicted protein matches can change between releases and do not prove molecular function, expression, disease causation, or experimental validation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.interpro-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.interpro-api",
          "url": "https://www.ebi.ac.uk/interpro/api/",
          "title": "InterPro API",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.italy-istat-sdmx-api",
      "title": "Istat SDMX API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Istat SDMX API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "italy-istat-sdmx-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:59d7c8a189c38d8e9d575f3f3cf4df474645a59457c97baef94ca9a133a2d0e0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/italy-istat-sdmx-api.json",
      "htmlPath": "/resources/view/public-data-apis/italy-istat-sdmx-api",
      "facts": [
        {
          "id": "fact.it.istat-sdmx-api.access",
          "statement": "The Istat SDMX web service exposes official Italian dataflows, structures, code lists, constraints, and multidimensional statistical observations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.it.istat-sdmx-api"
          ]
        },
        {
          "id": "fact.it.istat-sdmx-api.authentication",
          "statement": "Public statistical reads do not grant access to confidential microdata, respondent records, release management, table mutation, or official interpretation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.it.istat-sdmx-api"
          ]
        },
        {
          "id": "fact.it.istat-sdmx-api.request",
          "statement": "Clients must bind SDMX resource type, agency, flow, version, dimensional key, time range, detail, references, format, and response size and discover structures before data slices.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.it.istat-sdmx-api"
          ]
        },
        {
          "id": "fact.it.istat-sdmx-api.boundary",
          "statement": "Observations can be preliminary, revised, sampled, adjusted, suppressed, or classification-dependent and do not prove individual circumstances or comparability without metadata review.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.it.istat-sdmx-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.it.istat-sdmx-api",
          "url": "https://esploradati.istat.it/SDMXWS/",
          "title": "Istat SDMX web service",
          "publisher": "Italian National Institute of Statistics",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.japan-estat-api",
      "title": "Japan e-Stat API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Japan e-Stat API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "japan-estat-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:58cb303d783555b9c3aa6cdf3e140de8ebc206122d799ee499e63d2f7ac31651",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/japan-estat-api.json",
      "htmlPath": "/resources/view/public-data-apis/japan-estat-api",
      "facts": [
        {
          "id": "fact.japan.estat-api.access",
          "statement": "The e-Stat API provides machine-readable functions for official statistics lists, table data, metadata, datasets, and database navigation in XML, JSON, and CSV representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.japan.estat-api"
          ]
        },
        {
          "id": "fact.japan.estat-api.authentication",
          "statement": "Use requires an e-Stat account and application ID; that identifier is a credential and must remain outside public resource files and logs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.japan.estat-api"
          ]
        },
        {
          "id": "fact.japan.estat-api.request",
          "statement": "Clients must bind statistics identifiers, table or dataset identifiers, classifications, filters, language, limit, start position, and output representation and follow result totals.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.japan.estat-api"
          ]
        },
        {
          "id": "fact.japan.estat-api.boundary",
          "statement": "Official Japanese statistics can be preliminary, revised, suppressed, estimated, methodology-dependent, or language-specific and do not prove individual circumstances.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.japan.estat-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.japan.estat-api",
          "url": "https://www.e-stat.go.jp/api/en/api-info",
          "title": "e-Stat API Information",
          "publisher": "Statistics Bureau of Japan",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.jma-developer-data",
      "title": "JMA developer-data boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for JMA developer-data.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "jma-developer-data",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:07b081d72c41e3251ba3cb124296ad5a51b5de07b932aa2a49365d6194ecbdd3",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/jma-developer-data.json",
      "htmlPath": "/resources/view/public-data-apis/jma-developer-data",
      "facts": [
        {
          "id": "fact.jma.developer.data.access",
          "statement": "Japan Meteorological Agency documents weather, earthquake, tsunami, volcano, climate, forecast, warning, XML, and supporting public data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.jma.developer.data"
          ]
        },
        {
          "id": "fact.jma.developer.data.authentication",
          "statement": "Public data access does not grant warning issuance, forecast publication, observation, emergency, or Japan Meteorological Agency authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.jma.developer.data"
          ]
        },
        {
          "id": "fact.jma.developer.data.request",
          "statement": "Clients must bind feed or dataset, product code, issue and valid time, area, language, representation, and update cadence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.jma.developer.data"
          ]
        },
        {
          "id": "fact.jma.developer.data.boundary",
          "statement": "Products can be preliminary, corrected, delayed, or event-driven and do not replace official Japanese warnings, translations, or local safety decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.jma.developer.data"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.jma.developer.data",
          "url": "https://www.data.jma.go.jp/developer/index.html",
          "title": "JMA developer-data documentation",
          "publisher": "Japan Meteorological Agency",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.kaggle-api",
      "title": "Kaggle API and CLI boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Kaggle API and CLI.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "kaggle-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:0339b55f2af58d565f4c2a44676a541ab0d401aeb88925e22ace039368e11513",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/kaggle-api.json",
      "htmlPath": "/resources/view/public-data-apis/kaggle-api",
      "facts": [
        {
          "id": "fact.kaggle.api.access",
          "statement": "Kaggle documents documented dataset, competition, model, notebook, kernel, and file discovery or download operations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.kaggle.api"
          ]
        },
        {
          "id": "fact.kaggle.api.authentication",
          "statement": "Most operations require Kaggle account credentials that must remain secret; reads do not grant dataset, competition, model, notebook, submission, or Kaggle authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.kaggle.api"
          ]
        },
        {
          "id": "fact.kaggle.api.request",
          "statement": "Clients must bind resource family, owner and slug, version, file, command or endpoint, credential, pagination, and download destination.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.kaggle.api"
          ]
        },
        {
          "id": "fact.kaggle.api.boundary",
          "statement": "Kaggle-hosted content is contributor-supplied and access- or license-dependent and does not prove quality, safety, rights, benchmark validity, or suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.kaggle.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.kaggle.api",
          "url": "https://github.com/Kaggle/kaggle-api",
          "title": "Kaggle API and CLI documentation",
          "publisher": "Kaggle",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.lacnic-rdap",
      "title": "LACNIC RDAP boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for LACNIC RDAP.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "lacnic-rdap",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:7005cb854bdcb9548aee29a7800145b7f50ef1417b58f09c8f87c81b5d5699d4",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/lacnic-rdap.json",
      "htmlPath": "/resources/view/public-data-apis/lacnic-rdap",
      "facts": [
        {
          "id": "fact.lacnic.rdap.access",
          "statement": "LACNIC documents RDAP registration data for IP networks, autonomous-system numbers, entities, notices, and events.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.lacnic.rdap"
          ]
        },
        {
          "id": "fact.lacnic.rdap.authentication",
          "statement": "Public reads do not grant registry changes, resource ownership, routing, identity, contact, or LACNIC authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.lacnic.rdap"
          ]
        },
        {
          "id": "fact.lacnic.rdap.request",
          "statement": "Clients must bind RDAP object type, address or ASN, handle, search form, language, response notice, event, and referral.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.lacnic.rdap"
          ]
        },
        {
          "id": "fact.lacnic.rdap.boundary",
          "statement": "RDAP records can be redacted, referred, historical, or registrant-supplied and do not prove current identity, control, routing, or security.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.lacnic.rdap"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.lacnic.rdap",
          "url": "https://www.lacnic.net/1002/2/lacnic/rdap",
          "title": "LACNIC RDAP documentation",
          "publisher": "LACNIC",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.library-of-congress-json-api",
      "title": "Library of Congress JSON/YAML API boundary",
      "summary": "Official-source access, API-implemented endpoint selection, response-format, paging, collection-coverage, and interpretation boundaries for the Library of Congress JSON/YAML API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "library-of-congress-json-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-09T05:21:46Z",
      "contentHash": "sha256:d5999c8c6fb312339bf903fe2c388a4a999695aee74a3baa193a2a11c73fa8d8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-16T05:21:46Z"
      },
      "jsonPath": "/resources/public-data-apis/library-of-congress-json-api.json",
      "htmlPath": "/resources/view/public-data-apis/library-of-congress-json-api",
      "facts": [
        {
          "id": "fact.loc.json-api.access",
          "statement": "The loc.gov JSON/YAML API provides JSON or YAML structured information for API-implemented loc.gov endpoints, including digitized items, collections, images, and metadata; it does not include Library catalog records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.loc.json-api"
          ]
        },
        {
          "id": "fact.loc.json-api.authentication",
          "statement": "Public reads require no API key or authentication. loc.gov enforces rate limiting without publishing a request-rate value here, and deep paging past the 100,000th search-result item is unsupported; some searches can fail earlier.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.loc.json-api"
          ]
        },
        {
          "id": "fact.loc.json-api.request",
          "statement": "For a loc.gov page implemented by the API, use ?fo=json or ?fo=yaml; select a documented search, collection, item, or resource endpoint, then narrow searches with documented query parameters. Other loc.gov sections do not provide API responses, and exact parameter or page-size choices remain documentation-dependent.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.loc.json-api",
            "source.loc.requests"
          ]
        },
        {
          "id": "fact.loc.json-api.boundary",
          "statement": "API availability covers only the Library website portions implemented with this API; it does not establish complete holdings coverage, individual-item accuracy, or permission to retrieve or reuse any media.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.loc.json-api",
            "source.loc.requests"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.loc.json-api",
          "url": "https://www.loc.gov/apis/json-and-yaml/",
          "title": "JSON/YAML for loc.gov",
          "publisher": "Library of Congress",
          "observedAt": "2026-09-09T05:21:46Z"
        },
        {
          "id": "source.loc.requests",
          "url": "https://www.loc.gov/apis/json-and-yaml/requests/",
          "title": "Making API Requests",
          "publisher": "Library of Congress",
          "observedAt": "2026-09-09T05:21:47Z"
        }
      ]
    },
    {
      "id": "resource.public-data.malaysia-open-data-api",
      "title": "Malaysia Open Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Malaysia Open Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "malaysia-open-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:6156b5eddd8220529fd93f0141ef624c2235309abd8987940cd51c730f9e4eca",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/malaysia-open-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/malaysia-open-data-api",
      "facts": [
        {
          "id": "fact.malaysia.open-data-api.access",
          "statement": "Government of Malaysia documents official Malaysian datasets, catalogs, real-time series, geospatial services, and machine access documentation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.malaysia.open-data-api"
          ]
        },
        {
          "id": "fact.malaysia.open-data-api.authentication",
          "statement": "Public access and any documented token rules remain separate from publishing, source-system, personal-data, or government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.malaysia.open-data-api"
          ]
        },
        {
          "id": "fact.malaysia.open-data-api.request",
          "statement": "Clients must bind dataset or endpoint, fields, filters, time range, geography, paging, format, and service-specific limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.malaysia.open-data-api"
          ]
        },
        {
          "id": "fact.malaysia.open-data-api.boundary",
          "statement": "Datasets have publisher, coverage, revision, methodology, and update constraints and do not prove individual facts, completeness, policy effect, or endorsement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.malaysia.open-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.malaysia.open-data-api",
          "url": "https://developer.data.gov.my/",
          "title": "Malaysia Open Data API documentation",
          "publisher": "Government of Malaysia",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.maven-central-search-api",
      "title": "Maven Central Search API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Maven Central Search API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "maven-central-search-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:7065555ab584afd8aadd57fa09263f66f6e2b48a5d2ba964bdb6b80172d20baa",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/maven-central-search-api.json",
      "htmlPath": "/resources/view/public-data-apis/maven-central-search-api",
      "facts": [
        {
          "id": "fact.maven-central.search-api.access",
          "statement": "Sonatype Central Repository documents published Maven coordinates, versions, packaging, classifiers, timestamps, checksums, and search results.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.maven-central.search-api"
          ]
        },
        {
          "id": "fact.maven-central.search-api.authentication",
          "statement": "Public search is separate from authenticated publishing and namespace verification; access does not grant component ownership, release, signing, or Sonatype authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.maven-central.search-api"
          ]
        },
        {
          "id": "fact.maven-central.search-api.request",
          "statement": "Clients must bind query syntax, group, artifact, version, class, checksum, rows, start, core, and repository endpoint.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.maven-central.search-api"
          ]
        },
        {
          "id": "fact.maven-central.search-api.boundary",
          "statement": "Repository coordinates and checksums prove indexed artifacts, not publisher identity beyond repository controls, code safety, license compatibility, maintenance, or suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.maven-central.search-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.maven-central.search-api",
          "url": "https://central.sonatype.org/search/rest-api-guide/",
          "title": "Maven Central Search API documentation",
          "publisher": "Sonatype Central Repository",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.mediawiki-action-api",
      "title": "MediaWiki Action API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for MediaWiki Action API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "mediawiki-action-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:6681564e280f8ea89c50700f169b9eba64c4c8535a742edea071092ce4118f0c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/mediawiki-action-api.json",
      "htmlPath": "/resources/view/public-data-apis/mediawiki-action-api",
      "facts": [
        {
          "id": "fact.wikimedia.mediawiki-action-api.access",
          "statement": "The MediaWiki Action API supports structured query, search, parse, revision, category, link, user, authentication, and separately authorized edit workflows on MediaWiki sites.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.mediawiki-action-api"
          ]
        },
        {
          "id": "fact.wikimedia.mediawiki-action-api.authentication",
          "statement": "Many read modules allow anonymous access, while write actions require the target wiki's authentication, rights, CSRF token, and policy checks.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.mediawiki-action-api"
          ]
        },
        {
          "id": "fact.wikimedia.mediawiki-action-api.request",
          "statement": "Clients must bind target wiki, action and module, properties, namespace, titles or search terms, limits, format version, and continuation tokens and obey site-specific max limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.mediawiki-action-api"
          ]
        },
        {
          "id": "fact.wikimedia.mediawiki-action-api.boundary",
          "statement": "Wiki content is community-edited, revisioned, licensed per project, and potentially disputed or vandalized; an API response is not independent factual verification or universal reuse permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.mediawiki-action-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.wikimedia.mediawiki-action-api",
          "url": "https://www.mediawiki.org/wiki/API:Main_page",
          "title": "MediaWiki Action API",
          "publisher": "Wikimedia Foundation and MediaWiki",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.mesh-rdf-api",
      "title": "NLM MeSH RDF API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NLM MeSH RDF API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "mesh-rdf-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:4adda54d64220951c0837b21cdeed5106a06cec19b95b0c5d652d3ed2def33bd",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/mesh-rdf-api.json",
      "htmlPath": "/resources/view/public-data-apis/mesh-rdf-api",
      "facts": [
        {
          "id": "fact.nlm.mesh-rdf-api.access",
          "statement": "The MeSH RDF service exposes descriptors, concepts, terms, qualifiers, tree positions, mappings, labels, and release information through REST and RDF-oriented interfaces.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.mesh-rdf-api"
          ]
        },
        {
          "id": "fact.nlm.mesh-rdf-api.authentication",
          "statement": "Public reads require no user credential and do not grant vocabulary editing, indexing, translation, publication, licensing, or clinical authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.mesh-rdf-api"
          ]
        },
        {
          "id": "fact.nlm.mesh-rdf-api.request",
          "statement": "Clients must bind MeSH identifier or label, resource class, language, tree relation, RDF representation, and release and handle deprecated or replaced concepts explicitly.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.mesh-rdf-api"
          ]
        },
        {
          "id": "fact.nlm.mesh-rdf-api.boundary",
          "statement": "Vocabulary hierarchy and mappings support information organization and do not prove synonym equivalence in every context, diagnosis, causation, treatment, or current scientific consensus.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.mesh-rdf-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nlm.mesh-rdf-api",
          "url": "https://id.nlm.nih.gov/mesh/swagger/ui",
          "title": "MeSH RDF API documentation",
          "publisher": "U.S. National Library of Medicine",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.met-museum-collection-api",
      "title": "The Met Collection API boundary",
      "summary": "Official-source access, versioned search selection, object-record retrieval, request-rate, Open Access, and interpretation boundaries for The Met Collection API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "met-museum-collection-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-10T02:06:26Z",
      "contentHash": "sha256:c3d6235700df7da211b58c588bb98269c4eb03f89a931e8bce92896e66f4ae3b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-17T02:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/met-museum-collection-api.json",
      "htmlPath": "/resources/view/public-data-apis/met-museum-collection-api",
      "facts": [
        {
          "id": "fact.met.collection-api.access",
          "statement": "The Met Collection API is a RESTful JSON service for The Met's Open Access data. It documents object-ID listings, individual object records, departments, and collection search; object records include their available Open Access data and an image only when one is available under Open Access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.met.collection-api"
          ]
        },
        {
          "id": "fact.met.collection-api.authentication",
          "statement": "The service requires neither registration nor an API key. Clients must limit requests to 80 per second.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.met.collection-api"
          ]
        },
        {
          "id": "fact.met.collection-api.request",
          "statement": "The documented v1.1 search endpoint accepts the existing filters and uses offset/limit paging (default 100, maximum 500); the older v1 search returns matching Object IDs and is scheduled for retirement on October 1, 2026. A search response is not an object record, so a client must select the documented version, apply filters deliberately, and retrieve an object record separately when it needs record fields.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.met.collection-api"
          ]
        },
        {
          "id": "fact.met.collection-api.boundary",
          "statement": "The documentation scopes corresponding high-resolution JPEG images to Open Access data in the public domain. It does not establish a reuse permission for an asset outside that scope, and object metadata or image URLs do not by themselves prove completeness, accuracy, or rights for every asset use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.met.collection-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.met.collection-api",
          "url": "https://metmuseum.github.io/",
          "title": "The Metropolitan Museum of Art Collection API",
          "publisher": "The Metropolitan Museum of Art",
          "observedAt": "2026-09-10T02:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.met-norway-locationforecast-api",
      "title": "MET Norway Locationforecast API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for MET Norway Locationforecast API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "met-norway-locationforecast-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:5739bbf489fda14a78049a49d52ff23fe64d172b71da33316a599f537c929bd9",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/met-norway-locationforecast-api.json",
      "htmlPath": "/resources/view/public-data-apis/met-norway-locationforecast-api",
      "facts": [
        {
          "id": "fact.met.norway.locationforecast.api.access",
          "statement": "Norwegian Meteorological Institute documents location forecasts, weather variables, time-series geometry, units, and update metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.met.norway.locationforecast.api"
          ]
        },
        {
          "id": "fact.met.norway.locationforecast.api.authentication",
          "statement": "Requests must follow identification and rate guidance; reads do not grant forecast, warning, observation, emergency, or MET Norway authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.met.norway.locationforecast.api"
          ]
        },
        {
          "id": "fact.met.norway.locationforecast.api.request",
          "statement": "Clients must bind latitude, longitude, optional altitude, user-agent identification, conditional request, representation, and update time.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.met.norway.locationforecast.api"
          ]
        },
        {
          "id": "fact.met.norway.locationforecast.api.boundary",
          "statement": "Forecasts have model, terrain, resolution, latency, and uncertainty limits and do not replace official warnings or local safety and operational decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.met.norway.locationforecast.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.met.norway.locationforecast.api",
          "url": "https://api.met.no/weatherapi/locationforecast/2.0/documentation",
          "title": "MET Norway Locationforecast API documentation",
          "publisher": "Norwegian Meteorological Institute",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.metabolights-api",
      "title": "MetaboLights API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for MetaboLights API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "metabolights-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:656abb79d0660b28b64a90d541ecca2eb441a50f0a3cb3520f7b7dc0e047cfc1",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/metabolights-api.json",
      "htmlPath": "/resources/view/public-data-apis/metabolights-api",
      "facts": [
        {
          "id": "fact.ebi.metabolights-api.access",
          "statement": "MetaboLights APIs expose public metabolomics studies, assays, files, samples, protocols, compounds, validations, and repository metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.metabolights-api"
          ]
        },
        {
          "id": "fact.ebi.metabolights-api.authentication",
          "statement": "Public study reads are separate from token-protected submission, update, review, and private-study operations; credentials must not appear in public records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.metabolights-api"
          ]
        },
        {
          "id": "fact.ebi.metabolights-api.request",
          "statement": "Clients must bind study accession, endpoint, file or assay scope, format, version, validation behavior, and paging and distinguish public from private lifecycle states.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.metabolights-api"
          ]
        },
        {
          "id": "fact.ebi.metabolights-api.boundary",
          "statement": "Submitted metabolomics data can be revised, heterogeneous, incomplete, normalized differently, or method-dependent and does not prove metabolite identity, concentration, mechanism, or clinical relevance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.metabolights-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.metabolights-api",
          "url": "https://www.ebi.ac.uk/metabolights/ws/api/spec.html",
          "title": "MetaboLights REST API specification",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.meteofrance-api-portal",
      "title": "Météo-France API portal boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Météo-France API portal.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "meteofrance-api-portal",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:f13a7c5bfcab0462840206ef132f2511c6f2cdf0e939223b0436e52a7dddf34f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/meteofrance-api-portal.json",
      "htmlPath": "/resources/view/public-data-apis/meteofrance-api-portal",
      "facts": [
        {
          "id": "fact.meteofrance.api.portal.access",
          "statement": "Météo-France documents documented weather, climate, observation, forecast, warning, and model-data APIs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.meteofrance.api.portal"
          ]
        },
        {
          "id": "fact.meteofrance.api.portal.authentication",
          "statement": "Endpoints can require accounts, API keys, contracts, or product rights; reads do not grant warning, forecast, model, or Météo-France authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.meteofrance.api.portal"
          ]
        },
        {
          "id": "fact.meteofrance.api.portal.request",
          "statement": "Clients must bind API product, subscription, credential, location or grid, variable, time, model, format, and quota.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.meteofrance.api.portal"
          ]
        },
        {
          "id": "fact.meteofrance.api.portal.boundary",
          "statement": "Products have entitlement, model, resolution, quality, latency, and revision limits and do not replace official warnings or operational safety decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.meteofrance.api.portal"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.meteofrance.api.portal",
          "url": "https://portail-api.meteofrance.fr/web/en/api",
          "title": "Météo-France API portal documentation",
          "publisher": "Météo-France",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.meteoswiss-open-data",
      "title": "MeteoSwiss Open Data boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for MeteoSwiss Open Data.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "meteoswiss-open-data",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:4e8b9442cfcd304e43eff25f4921e582d9432dad80cfbe80de44ae53dc727427",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/meteoswiss-open-data.json",
      "htmlPath": "/resources/view/public-data-apis/meteoswiss-open-data",
      "facts": [
        {
          "id": "fact.meteoswiss.open.data.access",
          "statement": "Federal Office of Meteorology and Climatology MeteoSwiss documents Swiss weather and climate observations, forecasts, measurements, grids, radar, and open-data products.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.meteoswiss.open.data"
          ]
        },
        {
          "id": "fact.meteoswiss.open.data.authentication",
          "statement": "Open-data retrieval does not grant warning, forecast, station, model, publication, or Swiss-government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.meteoswiss.open.data"
          ]
        },
        {
          "id": "fact.meteoswiss.open.data.request",
          "statement": "Clients must bind dataset, station or grid, parameter, time interval, issue time, format, license, and update cadence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.meteoswiss.open.data"
          ]
        },
        {
          "id": "fact.meteoswiss.open.data.boundary",
          "statement": "Products have quality-control, spatial, temporal, model, latency, and revision limits and do not replace official warnings or local safety decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.meteoswiss.open.data"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.meteoswiss.open.data",
          "url": "https://www.meteoswiss.admin.ch/services-and-publications/service/open-data.html",
          "title": "MeteoSwiss Open Data documentation",
          "publisher": "Federal Office of Meteorology and Climatology MeteoSwiss",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.mgnify-api",
      "title": "MGnify API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for MGnify API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "mgnify-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:06844310c973721c7aad9d42212ca10dbe3def055b35d9087a1783d41e65a24a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/mgnify-api.json",
      "htmlPath": "/resources/view/public-data-apis/mgnify-api",
      "facts": [
        {
          "id": "fact.ebi.mgnify-api.access",
          "statement": "MGnify API v2 exposes public metagenomic studies, samples, analyses, assemblies, genomes, taxonomic and functional results, pipelines, and supporting metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.mgnify-api"
          ]
        },
        {
          "id": "fact.ebi.mgnify-api.authentication",
          "statement": "Most public reads require no authentication, while private data access uses ENA Webin tokens that must never be stored in public resources or logs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.mgnify-api"
          ]
        },
        {
          "id": "fact.ebi.mgnify-api.request",
          "statement": "Clients must bind resource, identifier, biome, taxon, pipeline version, filters, included relationships, fields, sorting, cursor paging, and supported JSON representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.mgnify-api"
          ]
        },
        {
          "id": "fact.ebi.mgnify-api.boundary",
          "statement": "Metagenomic outputs depend on sampling, sequencing, reference databases, pipelines, contamination controls, and release versions and do not prove organism viability or clinical meaning.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.mgnify-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.mgnify-api",
          "url": "https://www.ebi.ac.uk/metagenomics/api/v2/",
          "title": "MGnify API v2",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-ads-api",
      "title": "NASA ADS API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NASA ADS API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-ads-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:2ac7679342d5574c2c2a347707a4e2c78fed9cf706451fac3b71c9cc02ab582a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-ads-api.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-ads-api",
      "facts": [
        {
          "id": "fact.nasa.ads-api.access",
          "statement": "NASA Astrophysics Data System documents astronomy and physics bibliographic search, records, citations, references, metrics, and exports.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.ads-api"
          ]
        },
        {
          "id": "fact.nasa.ads-api.authentication",
          "statement": "Requests require an ADS API token that must remain secret; access does not grant record editing, publication, peer-review, or author identity authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.ads-api"
          ]
        },
        {
          "id": "fact.nasa.ads-api.request",
          "statement": "Clients must bind query syntax, fields, sort, rows, pagination, export format, and rate limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.ads-api"
          ]
        },
        {
          "id": "fact.nasa.ads-api.boundary",
          "statement": "Indexed metadata and citation links can be incomplete, merged, delayed, or revised and do not prove scientific validity, priority, identity, or impact.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.ads-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.ads-api",
          "url": "https://ui.adsabs.harvard.edu/help/api/",
          "title": "NASA ADS API documentation",
          "publisher": "NASA Astrophysics Data System",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-cmr-search-api",
      "title": "NASA CMR Search API boundary",
      "summary": "NASA CMR metadata discovery guidance, including representation-specific pagination, token permissions, throttling and underlying-data boundaries.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-cmr-search-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-29T02:04:37.949Z",
      "contentHash": "sha256:be604f747619a6f6f09d0a6ce3266392486061239c3b27db400691dfc9295c45",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-10-06T02:04:37.949Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-cmr-search-api.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-cmr-search-api",
      "facts": [
        {
          "id": "fact.nasa.cmr-search-api.access",
          "statement": "CMR discovers Earth-science metadata, including collections and granules; metadata discovery is separate from downloading the underlying data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.cmr-search-api"
          ]
        },
        {
          "id": "fact.nasa.cmr-search-api.authentication",
          "statement": "The guide includes token-free search examples. Permission-dependent searches use an authorized EDL or Launchpad token, preferably in the Authorization header. This review did not test live data access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.cmr-search-api"
          ]
        },
        {
          "id": "fact.nasa.cmr-search-api.request",
          "statement": "page_size has default 10 and maximum 2000. For supported parameter/JSON queries, send the previous response’s CMR-Search-After header with unchanged query parameters; do not combine it with page_num or offset.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.cmr-search-api"
          ]
        },
        {
          "id": "fact.nasa.cmr-search-api.boundary",
          "statement": "Search-after is stateless, not a frozen snapshot: ingestion or deletion can change traversal results. Honor Retry-After on HTTP 429. Metadata does not establish download permission, data availability, scientific validity, completeness or reuse rights.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.cmr-search-api"
          ]
        },
        {
          "id": "fact.nasa.cmr-search-api.stac",
          "statement": "CMR STAC output uses page-number pagination and does not support offset, scroll, CMR-Scroll-Id or CMR-Search-After. Do not apply the general search-after recommendation to this representation; explicitly select the required response format.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.cmr-search-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.cmr-search-api",
          "url": "https://cmr.earthdata.nasa.gov/search/site/docs/search/api.html",
          "title": "CMR Search API",
          "publisher": "NASA Earthdata",
          "observedAt": "2026-09-29T02:04:37.949Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-donki-api",
      "title": "NASA DONKI API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NASA DONKI API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-donki-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:343f9a1d3d69bb93d6fda8cd93fc75c30fba2fbfa1e1043c0dad36143e4f41b7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-donki-api.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-donki-api",
      "facts": [
        {
          "id": "fact.nasa.donki-api.access",
          "statement": "NASA Community Coordinated Modeling Center documents space-weather events, analyses, notifications, and linked instruments or models.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.donki-api"
          ]
        },
        {
          "id": "fact.nasa.donki-api.authentication",
          "statement": "API reads use a NASA API key or documented public allowance and do not grant forecast, alert, spacecraft, or event-editing authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.donki-api"
          ]
        },
        {
          "id": "fact.nasa.donki-api.request",
          "statement": "Clients must bind event family, start and end time, location, catalog, page, and API-key handling.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.donki-api"
          ]
        },
        {
          "id": "fact.nasa.donki-api.boundary",
          "statement": "DONKI records can be preliminary, linked across event types, or revised and do not independently predict impact, timing, or operational safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.donki-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.donki-api",
          "url": "https://ccmc.gsfc.nasa.gov/tools/DONKI/",
          "title": "NASA DONKI API documentation",
          "publisher": "NASA Community Coordinated Modeling Center",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-eonet-api",
      "title": "NASA EONET API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NASA EONET API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-eonet-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:5cceed6d38b2b2ef7901a361fe967b0fd250ce2c55475211c4ec887b7b051967",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-eonet-api.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-eonet-api",
      "facts": [
        {
          "id": "fact.nasa.eonet-api.access",
          "statement": "NASA Earth Observatory Natural Event Tracker documents natural-event categories, event geometry, dates, sources, and layers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.eonet-api"
          ]
        },
        {
          "id": "fact.nasa.eonet-api.authentication",
          "statement": "Documented reads are public and do not grant event declaration, emergency, satellite, or source-system authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.eonet-api"
          ]
        },
        {
          "id": "fact.nasa.eonet-api.request",
          "statement": "Clients must bind API version, category, source, date, status, limit, and geometry.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.eonet-api"
          ]
        },
        {
          "id": "fact.nasa.eonet-api.boundary",
          "statement": "EONET aggregates source reports that can be delayed, revised, spatially approximate, or incomplete and does not prove hazard extent or response need.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.eonet-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.eonet-api",
          "url": "https://eonet.gsfc.nasa.gov/docs/v3",
          "title": "NASA EONET API documentation",
          "publisher": "NASA Earth Observatory Natural Event Tracker",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-epic-api",
      "title": "NASA EPIC API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NASA EPIC API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-epic-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:3d52ba9b58f6d27795b639b9824794c20a59465c89abc805af51e36d96d38221",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-epic-api.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-epic-api",
      "facts": [
        {
          "id": "fact.nasa.epic-api.access",
          "statement": "NASA Earth Polychromatic Imaging Camera documents EPIC image metadata, dates, centroid coordinates, attitude, and archive paths.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.epic-api"
          ]
        },
        {
          "id": "fact.nasa.epic-api.authentication",
          "statement": "Documented reads are public and do not grant spacecraft control, image publication, observation scheduling, or NASA authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.epic-api"
          ]
        },
        {
          "id": "fact.nasa.epic-api.request",
          "statement": "Clients must bind natural or enhanced collection, date, image identifier, archive path, and returned metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.epic-api"
          ]
        },
        {
          "id": "fact.nasa.epic-api.boundary",
          "statement": "EPIC imagery has acquisition, calibration, illumination, cloud, and spatial-resolution limits and does not prove local ground conditions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.epic-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.epic-api",
          "url": "https://epic.gsfc.nasa.gov/about/api",
          "title": "NASA EPIC API documentation",
          "publisher": "NASA Earth Polychromatic Imaging Camera",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-exoplanet-archive-tap-api",
      "title": "NASA Exoplanet Archive TAP API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for NASA Exoplanet Archive TAP API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-exoplanet-archive-tap-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:2240817f10af0b9a33474329d45d3676c8e5a73286ee85ec6c084f4c5becdb9b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-exoplanet-archive-tap-api.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-exoplanet-archive-tap-api",
      "facts": [
        {
          "id": "fact.nasa.exoplanet-archive-tap-api.access",
          "statement": "The NASA Exoplanet Archive provides programmatic table access to published exoplanet, host-star, candidate, and mission data, with current tables moving to the IVOA Table Access Protocol service.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.exoplanet-archive-tap-api"
          ]
        },
        {
          "id": "fact.nasa.exoplanet-archive-tap-api.authentication",
          "statement": "Public archive queries do not require account authorization and do not grant data-submission, archive-curation, telescope, proposal, or publisher authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.exoplanet-archive-tap-api"
          ]
        },
        {
          "id": "fact.nasa.exoplanet-archive-tap-api.request",
          "statement": "Clients must select a current TAP table and bind ADQL projection, filters, ordering, output format, and bounded result size instead of relying on retired legacy-table examples.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.exoplanet-archive-tap-api"
          ]
        },
        {
          "id": "fact.nasa.exoplanet-archive-tap-api.boundary",
          "statement": "Archive parameters can come from multiple publications, be revised, retired, or model-dependent and do not independently establish discovery confirmation, habitability, scientific validity, or observation priority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.exoplanet-archive-tap-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.exoplanet-archive-tap-api",
          "url": "https://exoplanetarchive.ipac.caltech.edu/docs/program_interfaces.html",
          "title": "Exoplanet Archive API User Guide",
          "publisher": "NASA Exoplanet Science Institute at Caltech/IPAC",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-firms-api",
      "title": "NASA FIRMS API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NASA FIRMS API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-firms-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:83ae8b837a078690af07f2d2ef3d9f3679198dc02d2a407bf2d9817c8f3d1021",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-firms-api.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-firms-api",
      "facts": [
        {
          "id": "fact.nasa.firms.api.access",
          "statement": "NASA Fire Information for Resource Management System documents satellite-derived active-fire and thermal-anomaly data, area queries, source products, and map-key access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.firms.api"
          ]
        },
        {
          "id": "fact.nasa.firms.api.authentication",
          "statement": "Requests require a documented map key and quota; reads do not grant satellite, fire declaration, emergency, land-management, or NASA authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.firms.api"
          ]
        },
        {
          "id": "fact.nasa.firms.api.request",
          "statement": "Clients must bind source product, area or coordinates, day range, date, map key, representation, confidence, and satellite acquisition time.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.firms.api"
          ]
        },
        {
          "id": "fact.nasa.firms.api.boundary",
          "statement": "Thermal anomalies have cloud, sensor, revisit, geolocation, confidence, and false-positive limits and do not prove fire perimeter, cause, severity, or required response.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.firms.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.firms.api",
          "url": "https://firms.modaps.eosdis.nasa.gov/api/",
          "title": "NASA FIRMS API documentation",
          "publisher": "NASA Fire Information for Resource Management System",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-open-apis",
      "title": "NASA Open APIs boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for NASA Open APIs.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-open-apis",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:5f7acadbfc5a0ef75b2d60b14c78492dd473f6dd2d0d10a47e23e4f9555ac0e1",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-open-apis.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-open-apis",
      "facts": [
        {
          "id": "fact.nasa.open-apis.access",
          "statement": "NASA Open APIs publish multiple scientific and media data services behind service-specific endpoints and parameters.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.open-apis"
          ]
        },
        {
          "id": "fact.nasa.open-apis.authentication",
          "statement": "DEMO_KEY supports limited exploration, while sustained applications should obtain their own key and obey response rate-limit headers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.open-apis"
          ]
        },
        {
          "id": "fact.nasa.open-apis.request",
          "statement": "Default documented limits apply across api.nasa.gov requests for a key and can temporarily block callers that exceed them.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.open-apis"
          ]
        },
        {
          "id": "fact.nasa.open-apis.boundary",
          "statement": "A NASA API listing or DEMO_KEY response does not guarantee every service, asset, date, coordinate, or upstream data provider is available or complete.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.open-apis"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.open-apis",
          "url": "https://api.nasa.gov/",
          "title": "NASA Open APIs",
          "publisher": "National Aeronautics and Space Administration",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-power-api",
      "title": "NASA POWER API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for NASA POWER API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-power-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:c103117ac586cefdf8369a427f67e05b2238d777b0fe3554e1d62bb93a662272",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-power-api.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-power-api",
      "facts": [
        {
          "id": "fact.nasa.power-api.access",
          "statement": "NASA POWER publishes free global solar and meteorological Analysis Ready Data through daily, hourly, monthly, annual, climatology, and system API families.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.power-api"
          ]
        },
        {
          "id": "fact.nasa.power-api.authentication",
          "statement": "Documented public reads do not require a user credential, but access does not grant authority to change NASA products, service configuration, or upstream observations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.power-api"
          ]
        },
        {
          "id": "fact.nasa.power-api.request",
          "statement": "Clients must bind temporal service, community, parameters, coordinates, date range, time standard, and format and avoid concurrent or finer-resolution requests that burden the shared service.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.power-api"
          ]
        },
        {
          "id": "fact.nasa.power-api.boundary",
          "statement": "Meteorological products can be replaced by improved climate-quality data two to three months after real time and retain spatial, model, and parameter limits; they do not prove site-level conditions or safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.power-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.power-api",
          "url": "https://power.larc.nasa.gov/docs/services/api/",
          "title": "NASA POWER API documentation",
          "publisher": "NASA Langley Research Center",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nasa-techport-api",
      "title": "NASA TechPort API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NASA TechPort API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nasa-techport-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:6cad346aecf2d47760159241b3b4358f6b4e4274280d6f8f3c6633daf352d740",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/nasa-techport-api.json",
      "htmlPath": "/resources/view/public-data-apis/nasa-techport-api",
      "facts": [
        {
          "id": "fact.nasa.techport-api.access",
          "statement": "NASA documents public NASA technology-project, organization, program, and taxonomy records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.techport-api"
          ]
        },
        {
          "id": "fact.nasa.techport-api.authentication",
          "statement": "Requests follow the documented API access rules and do not grant project membership, funding, reporting, editing, or NASA representation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.techport-api"
          ]
        },
        {
          "id": "fact.nasa.techport-api.request",
          "statement": "Clients must bind project or organization identifier, update window, taxonomy, fields, and paging.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.techport-api"
          ]
        },
        {
          "id": "fact.nasa.techport-api.boundary",
          "statement": "TechPort information is program-reported and can change; it does not prove technical readiness, funding availability, endorsement, or project outcome.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nasa.techport-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nasa.techport-api",
          "url": "https://techport.nasa.gov/help/articles/api",
          "title": "NASA TechPort API documentation",
          "publisher": "NASA",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.national-archives-catalog-api",
      "title": "National Archives Catalog API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for National Archives Catalog API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "national-archives-catalog-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-24T02:06:39Z",
      "contentHash": "sha256:557c3ee2ebeb078e4334f532b9d380fd38b7e0765ff72d001d89c38b095b183a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-10-01T02:06:39Z"
      },
      "jsonPath": "/resources/public-data-apis/national-archives-catalog-api.json",
      "htmlPath": "/resources/view/public-data-apis/national-archives-catalog-api",
      "facts": [
        {
          "id": "fact.nara.catalog-api.access",
          "statement": "National Archives documentation says the Catalog API offers public Catalog data in machine-readable JSON, including archival descriptions, authority records, metadata about digital objects, extracted text, and public contributions. This does not establish complete holdings, current record accuracy, complete digital-object access, or government authority for an Agent's use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nara.catalog-api"
          ]
        },
        {
          "id": "fact.nara.catalog-api.authentication",
          "statement": "Documentation says every request must include an assigned API key and warns against publishing it. The default key is read-only and has a documented default allowance of 10,000 queries per month; contribution writes require a registered Catalog user and a separately requested read/write key. This review did not request, create, test, or receive a key, account, write permission, or access to any record.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nara.catalog-api"
          ]
        },
        {
          "id": "fact.nara.catalog-api.request",
          "statement": "Documentation describes keyword search across fields, ranges, sorting, selected returned fields, and JSON record or search-result metadata. It says users must not scrape or download all Catalog data through the API. This review does not establish a pagination, identifier, endpoint, filter, bulk-export, rate-limit-exception, or observed-service-behavior contract.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nara.catalog-api"
          ]
        },
        {
          "id": "fact.nara.catalog-api.boundary",
          "statement": "Catalog metadata about digital objects, extracted text, tags, transcriptions, and comments are not a grant to retrieve media, reuse an asset, modify content, or represent modified content as National Archives material. The reviewed documentation does not establish record authenticity, completeness, legal effect, historical interpretation, or permission for any digital object or contribution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nara.catalog-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nara.catalog-api",
          "url": "https://www.archives.gov/research/catalog/help/api",
          "title": "API for the National Archives Catalog",
          "publisher": "U.S. National Archives and Records Administration",
          "observedAt": "2026-09-24T02:06:39Z"
        }
      ]
    },
    {
      "id": "resource.public-data.national-park-service-api",
      "title": "National Park Service API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for National Park Service API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "national-park-service-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-25T02:08:03.379Z",
      "contentHash": "sha256:1b18c1331b031a7c98206665dcfa4792fe91f9e142e50e38e2579d1823608c82",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-10-02T02:08:03.379Z"
      },
      "jsonPath": "/resources/public-data-apis/national-park-service-api.json",
      "htmlPath": "/resources/view/public-data-apis/national-park-service-api",
      "facts": [
        {
          "id": "fact.nps.data-api.access",
          "statement": "The documented NPS API exposes JSON endpoints for parks, alerts, articles, campgrounds, events, visitor centers, people, places, and related resources. This documentation review does not verify live records or complete park coverage.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nps.data-api.swagger"
          ]
        },
        {
          "id": "fact.nps.data-api.authentication",
          "statement": "The Swagger contract declares api_key as a query API-key security scheme and requires it for GET /parks. No key was requested or used; authentication documentation is not authority to write records, reserve visits, or issue permits. Keep credentials out of public URLs and logs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nps.data-api.swagger"
          ]
        },
        {
          "id": "fact.nps.data-api.request",
          "statement": "For GET /parks, the documented parameters are parkCode, stateCode, limit, start, q, and sort; limit defaults to 50 and start defaults to 0. Its response schema exposes total, limit, start, and data. Do not assume a fields selector or these same parameters on other endpoints; no paging behavior was tested against live records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nps.data-api.swagger"
          ]
        },
        {
          "id": "fact.nps.data-api.boundary",
          "statement": "Park image metadata includes credit and URL; gallery-asset metadata separately includes constraintsInfo and copyright. A metadata URL, credit, or schema example does not independently grant reuse permission or verify asset availability. Current park notices, safety conditions, permissions, and media-specific rights require separate checks.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nps.data-api.swagger"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nps.data-api",
          "url": "https://www.nps.gov/subjects/developer/api-documentation.htm",
          "title": "National Park Service API Documentation",
          "publisher": "U.S. National Park Service",
          "observedAt": "2026-09-25T02:04:22.532Z"
        },
        {
          "id": "source.nps.data-api.swagger",
          "url": "https://www.nps.gov/subjects/developer/customcf/swagger.json?03142019",
          "title": "NPS API Swagger contract",
          "publisher": "U.S. National Park Service",
          "observedAt": "2026-09-25T02:08:03.379Z"
        }
      ]
    },
    {
      "id": "resource.public-data.national-weather-service-api",
      "title": "National Weather Service API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for National Weather Service API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "national-weather-service-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:b11f44b509fe863440da2118db4575c210d2bae9d16283f24cb14f653ab2a08c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/national-weather-service-api.json",
      "htmlPath": "/resources/view/public-data-apis/national-weather-service-api",
      "facts": [
        {
          "id": "fact.noaa.national-weather-service-api.access",
          "statement": "The National Weather Service API exposes forecasts, alerts, observations, stations, points, grids, products, and related metadata using linked JSON and GeoJSON resources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.national-weather-service-api"
          ]
        },
        {
          "id": "fact.noaa.national-weather-service-api.authentication",
          "statement": "An API key is not required, but automated clients must send an identifying User-Agent and follow reasonable request-rate and retry behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.national-weather-service-api"
          ]
        },
        {
          "id": "fact.noaa.national-weather-service-api.request",
          "statement": "Clients must resolve point-to-grid relationships, use pagination links where present, and retain issuance, update, expiration, status, and unit metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.national-weather-service-api"
          ]
        },
        {
          "id": "fact.noaa.national-weather-service-api.boundary",
          "statement": "Weather observations and forecasts can change rapidly and have spatial, temporal, and sensor limits; safety decisions must use the latest authoritative alert and local guidance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.national-weather-service-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.noaa.national-weather-service-api",
          "url": "https://www.weather.gov/documentation/services-web-api",
          "title": "National Weather Service API Web Service",
          "publisher": "NOAA National Weather Service",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.natural-earth-downloads",
      "title": "Natural Earth downloads boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Natural Earth downloads.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "natural-earth-downloads",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:f440090d5796efd704103638397f621352fbcc4cea19083a1654a077d03153b2",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/natural-earth-downloads.json",
      "htmlPath": "/resources/view/public-data-apis/natural-earth-downloads",
      "facts": [
        {
          "id": "fact.natural.earth.downloads.access",
          "statement": "Natural Earth documents public-domain cultural, physical, raster, and vector map datasets at documented scales and download locations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.natural.earth.downloads"
          ]
        },
        {
          "id": "fact.natural.earth.downloads.authentication",
          "statement": "Public reads do not grant boundary, cartographic, jurisdictional, territorial, attribution, or Natural Earth editorial authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.natural.earth.downloads"
          ]
        },
        {
          "id": "fact.natural.earth.downloads.request",
          "statement": "Clients must bind dataset family, scale, theme, layer, version, geometry type, archive, projection, and update state.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.natural.earth.downloads"
          ]
        },
        {
          "id": "fact.natural.earth.downloads.boundary",
          "statement": "Cartographic datasets are generalized, scale-specific, editorial, and sometimes disputed and do not prove legal boundaries, sovereignty, address accuracy, ownership, or current ground conditions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.natural.earth.downloads"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.natural.earth.downloads",
          "url": "https://www.naturalearthdata.com/downloads/",
          "title": "Natural Earth downloads documentation",
          "publisher": "Natural Earth",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ncbi-blast-url-api",
      "title": "NCBI BLAST URL API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NCBI BLAST URL API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ncbi-blast-url-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:b49a01392ef08162dcc1d7dd87b8335f1884ccf899c854023b06f377a9833545",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/ncbi-blast-url-api.json",
      "htmlPath": "/resources/view/public-data-apis/ncbi-blast-url-api",
      "facts": [
        {
          "id": "fact.ncbi.blast-url-api.access",
          "statement": "The BLAST URL API submits sequence-similarity searches, checks asynchronous request status, and retrieves reports in supported text, XML, JSON, and alignment formats.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.blast-url-api"
          ]
        },
        {
          "id": "fact.ncbi.blast-url-api.authentication",
          "statement": "Public requests require no account, while service use does not grant database curation, sequence ownership, computational priority, publication, or interpretation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.blast-url-api"
          ]
        },
        {
          "id": "fact.ncbi.blast-url-api.request",
          "statement": "Clients must bind program, database, query, search parameters, request identifier, polling cadence, format, and retention window and avoid rapid repeated submissions or status checks.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.blast-url-api"
          ]
        },
        {
          "id": "fact.ncbi.blast-url-api.boundary",
          "statement": "Similarity scores depend on sequence quality, database release, program, parameters, composition, and statistics and do not prove homology, function, taxonomy, pathogenicity, or clinical relevance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.blast-url-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ncbi.blast-url-api",
          "url": "https://blast.ncbi.nlm.nih.gov/doc/blast-help/urlapi.html",
          "title": "BLAST URL API documentation",
          "publisher": "U.S. National Center for Biotechnology Information",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ncbi-eutilities",
      "title": "NCBI Entrez E-utilities boundary",
      "summary": "NCBI E-utilities documentation boundaries for operations, paging, history writes, request identification and reuse; this review does not verify API execution, clinical validity or permission to redistribute records.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ncbi-eutilities",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T19:51:24.542Z",
      "contentHash": "sha256:e66593a8d7298d7fb7e6923ea8830238801806f8539c96f462c024c98f2337c1",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T19:51:24.542Z"
      },
      "jsonPath": "/resources/public-data-apis/ncbi-eutilities.json",
      "htmlPath": "/resources/view/public-data-apis/ncbi-eutilities",
      "facts": [
        {
          "id": "fact.ncbi.eutilities.access",
          "statement": "EInfo provides database information; ESearch returns matching UIDs, ESummary returns summaries, EFetch retrieves records, and ELink resolves links. EInfo and ESearch default to XML with optional JSON; EFetch formats depend on the database.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.eutilities"
          ]
        },
        {
          "id": "fact.ncbi.eutilities.authentication",
          "statement": "The usage guide documents at most 3 requests per second per IP without api_key and a default of 10 with a key. tool must have no spaces; email identifies the software developer, not an end user. Supplying these values alone does not complete their registration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.eutilities.usage"
          ]
        },
        {
          "id": "fact.ncbi.eutilities.request",
          "statement": "ESearch retstart defaults to 0 and retmax to 20, with a 10,000-record maximum. PubMed and PMC expose only the first 10,000 matches through ESearch. usehistory=y posts results to the History server; WebEnv and query_key bind stored sets. EPost uploads UID sets rather than reading records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.eutilities"
          ]
        },
        {
          "id": "fact.ncbi.eutilities.boundary",
          "statement": "The usage guide requires the NCBI Disclaimer and Copyright notice to be visible in software using E-utilities. PubMed abstracts may include protected material; retrieval does not establish redistribution rights.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.eutilities.usage"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ncbi.eutilities",
          "url": "https://www.ncbi.nlm.nih.gov/books/NBK25499/",
          "title": "The E-utilities In-Depth: Parameters, Syntax and More",
          "publisher": "U.S. National Center for Biotechnology Information",
          "observedAt": "2026-09-06T19:51:24.542Z"
        },
        {
          "id": "source.ncbi.eutilities.usage",
          "url": "https://www.ncbi.nlm.nih.gov/books/NBK25497/",
          "title": "A General Introduction to the E-utilities",
          "publisher": "U.S. National Center for Biotechnology Information",
          "observedAt": "2026-09-06T19:52:23.636Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ncbi-variation-api",
      "title": "NCBI Variation Services API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NCBI Variation Services API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ncbi-variation-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:4f5ad5d172ad1f38b37332a29ff716a40670526a89201039abce5080320163d0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/ncbi-variation-api.json",
      "htmlPath": "/resources/view/public-data-apis/ncbi-variation-api",
      "facts": [
        {
          "id": "fact.ncbi.variation-api.access",
          "statement": "NCBI Variation Services expose variant normalization, representation translation, SPDI, HGVS-related transformations, reference sequences, placements, and associated public variation data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.variation-api"
          ]
        },
        {
          "id": "fact.ncbi.variation-api.authentication",
          "statement": "Public reads require no user credential and do not grant ClinVar submission, curation, reference-sequence mutation, diagnostic, or regulatory authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.variation-api"
          ]
        },
        {
          "id": "fact.ncbi.variation-api.request",
          "statement": "Clients must bind assembly or reference accession, sequence position, deleted and inserted sequence, notation, endpoint, and response representation and handle ambiguous or failed normalization.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.variation-api"
          ]
        },
        {
          "id": "fact.ncbi.variation-api.boundary",
          "statement": "Normalized representation is not evidence of variant presence, zygosity, pathogenicity, phenotype, sample identity, clinical significance, or consistency across genome assemblies.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.variation-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ncbi.variation-api",
          "url": "https://api.ncbi.nlm.nih.gov/variation/v0/",
          "title": "NCBI Variation Services API",
          "publisher": "U.S. National Center for Biotechnology Information",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.neon-data-api",
      "title": "NEON Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NEON Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "neon-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:5316c0c007712a2e0a2a50a72aaea7dc9f15ca34e0880ffd9c266c41d359c9c0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/neon-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/neon-data-api",
      "facts": [
        {
          "id": "fact.neon.data-api.access",
          "statement": "National Ecological Observatory Network documents ecological data products, sites, locations, releases, files, samples, and availability metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.neon.data-api"
          ]
        },
        {
          "id": "fact.neon.data-api.authentication",
          "statement": "Public discovery is separate from token-assisted higher request allowances and does not grant sampling, curation, publication, or observatory authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.neon.data-api"
          ]
        },
        {
          "id": "fact.neon.data-api.request",
          "statement": "Clients must bind product, site, date, release, package, file, paging, and token handling.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.neon.data-api"
          ]
        },
        {
          "id": "fact.neon.data-api.boundary",
          "statement": "NEON data has protocol, calibration, quality-flag, spatial, temporal, and release constraints and does not prove ecological cause or current site condition.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.neon.data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.neon.data-api",
          "url": "https://data.neonscience.org/data-api/",
          "title": "NEON Data API documentation",
          "publisher": "National Ecological Observatory Network",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.new-zealand-data-api",
      "title": "New Zealand data.govt.nz API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for New Zealand data.govt.nz API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "new-zealand-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:8415bc4dd66516cb1fa708f2425e5a87522947fa17508ffbd50f495da087ed9f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/new-zealand-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/new-zealand-data-api",
      "facts": [
        {
          "id": "fact.new-zealand.data-api.access",
          "statement": "New Zealand Government documents catalog datasets, organizations, groups, tags, packages, and CKAN-compatible discovery metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.new-zealand.data-api"
          ]
        },
        {
          "id": "fact.new-zealand.data-api.authentication",
          "statement": "Public catalog reads are separate from authenticated publishing and do not grant source-dataset access, editing, licensing, or government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.new-zealand.data-api"
          ]
        },
        {
          "id": "fact.new-zealand.data-api.request",
          "statement": "Clients must bind CKAN action, package or organization identifier, search query, filters, rows, start, and returned distribution links.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.new-zealand.data-api"
          ]
        },
        {
          "id": "fact.new-zealand.data-api.boundary",
          "statement": "Catalog metadata is supplied by publishers and can be stale, incomplete, or link to unavailable data; listing does not prove quality, rights, or endorsement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.new-zealand.data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.new-zealand.data-api",
          "url": "https://www.data.govt.nz/toolkit/open-data/api-documentation/",
          "title": "New Zealand data.govt.nz API documentation",
          "publisher": "New Zealand Government",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nhtsa-vpic-api",
      "title": "NHTSA vPIC API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NHTSA vPIC API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nhtsa-vpic-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:7be6251ccf92bc15d9ba5dafa963530e2c09a86d1f24584957000c65665511be",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/nhtsa-vpic-api.json",
      "htmlPath": "/resources/view/public-data-apis/nhtsa-vpic-api",
      "facts": [
        {
          "id": "fact.nhtsa.vpic-api.access",
          "statement": "The vPIC API decodes vehicle identification numbers and exposes manufacturer, make, model, vehicle type, country, equipment, variable, and related reference data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nhtsa.vpic-api"
          ]
        },
        {
          "id": "fact.nhtsa.vpic-api.authentication",
          "statement": "Documented public reads require no user credential and do not grant vehicle registration, title, recall completion, certification, manufacturer, or enforcement authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nhtsa.vpic-api"
          ]
        },
        {
          "id": "fact.nhtsa.vpic-api.request",
          "statement": "Clients must select the exact decode or reference endpoint, bind VIN or model-year and other filters, choose JSON, XML, or CSV output, and process partial decode results explicitly.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nhtsa.vpic-api"
          ]
        },
        {
          "id": "fact.nhtsa.vpic-api.boundary",
          "statement": "Decoded attributes depend on manufacturer submissions and VIN structure and do not prove physical configuration, ownership, roadworthiness, recall status, or legal identity of a specific vehicle.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nhtsa.vpic-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nhtsa.vpic-api",
          "url": "https://vpic.nhtsa.dot.gov/api/",
          "title": "vPIC API documentation",
          "publisher": "National Highway Traffic Safety Administration",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nih-reporter-api-v2",
      "title": "NIH RePORTER API v2 boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for NIH RePORTER API v2.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nih-reporter-api-v2",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:caa5455ea7ea199b5796a8eee3a2bdf5a57a006bd855af6bf42de8f7c73ae37d",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/nih-reporter-api-v2.json",
      "htmlPath": "/resources/view/public-data-apis/nih-reporter-api-v2",
      "facts": [
        {
          "id": "fact.nih.reporter-api-v2.access",
          "statement": "NIH RePORTER API v2 exposes scientific award, project, and publication data from NIH and participating federal agencies through JSON endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nih.reporter-api-v2"
          ]
        },
        {
          "id": "fact.nih.reporter-api-v2.authentication",
          "statement": "Project searches use structured POST criteria, an offset no greater than 14,999, a maximum limit of 500, and optional search identifiers for subsequent retrieval.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nih.reporter-api-v2"
          ]
        },
        {
          "id": "fact.nih.reporter-api-v2.request",
          "statement": "NIH recommends no more than one request per second and off-peak scheduling for large jobs, so clients need pacing, paging, and bounded queries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nih.reporter-api-v2"
          ]
        },
        {
          "id": "fact.nih.reporter-api-v2.boundary",
          "statement": "Award and publication records describe administrative and linked research data and do not prove scientific merit, project outcomes, causal impact, or a complete funding history.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nih.reporter-api-v2"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nih.reporter-api-v2",
          "url": "https://api.reporter.nih.gov/?urls.primaryName=V2.0",
          "title": "NIH RePORTER API",
          "publisher": "U.S. National Institutes of Health",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nist-nvd-vulnerabilities-api",
      "title": "NIST NVD Vulnerabilities API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for NIST NVD Vulnerabilities API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nist-nvd-vulnerabilities-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:5264fe3bcc2b66a22ac66fb9d22be3065a7ec0bb8e4b6c9e60a8efaa2239a47c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/nist-nvd-vulnerabilities-api.json",
      "htmlPath": "/resources/view/public-data-apis/nist-nvd-vulnerabilities-api",
      "facts": [
        {
          "id": "fact.nist.nvd-vulnerabilities-api.access",
          "statement": "The NVD Vulnerabilities API 2.0 exposes CVE records and NVD enrichment with identifiers, date windows, keyword, weakness, configuration, and severity filters.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nist.nvd-vulnerabilities-api"
          ]
        },
        {
          "id": "fact.nist.nvd-vulnerabilities-api.authentication",
          "statement": "An API key is optional for lower-volume access and is recommended for sustained synchronization; keys are credentials and belong in headers rather than public assets.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nist.nvd-vulnerabilities-api"
          ]
        },
        {
          "id": "fact.nist.nvd-vulnerabilities-api.request",
          "statement": "Clients should use modification windows, results-per-page, start index, backoff, and the published rate limits instead of repeatedly downloading the full collection.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nist.nvd-vulnerabilities-api"
          ]
        },
        {
          "id": "fact.nist.nvd-vulnerabilities-api.boundary",
          "statement": "NVD enrichment and CVE source data can change or remain incomplete and do not prove exploitability, affected deployment, remediation success, or a complete risk assessment.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nist.nvd-vulnerabilities-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nist.nvd-vulnerabilities-api",
          "url": "https://nvd.nist.gov/developers/vulnerabilities",
          "title": "NVD Vulnerabilities API",
          "publisher": "U.S. National Institute of Standards and Technology",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nlm-clinical-tables-api",
      "title": "NLM Clinical Tables Search Service boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NLM Clinical Tables Search Service.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nlm-clinical-tables-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:b9464c92b276b480d85eb7e3280fad3a1234c5dd26da395b280587cf88107e64",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/nlm-clinical-tables-api.json",
      "htmlPath": "/resources/view/public-data-apis/nlm-clinical-tables-api",
      "facts": [
        {
          "id": "fact.nlm.clinical-tables-api.access",
          "statement": "The Clinical Tables Search Service provides public autocomplete and lookup APIs over named clinical terminology and reference datasets such as conditions and related tables.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.clinical-tables-api"
          ]
        },
        {
          "id": "fact.nlm.clinical-tables-api.authentication",
          "statement": "Documented reads require no user credential and do not grant terminology licensing beyond source terms, patient-data access, diagnosis, prescribing, or clinical-system authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.clinical-tables-api"
          ]
        },
        {
          "id": "fact.nlm.clinical-tables-api.request",
          "statement": "Clients must select the exact dataset, bind search terms, fields, filters, result count, paging, and response interpretation and preserve source terminology identifiers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.clinical-tables-api"
          ]
        },
        {
          "id": "fact.nlm.clinical-tables-api.boundary",
          "statement": "Search matches are terminology suggestions that can be incomplete, version-dependent, or context-free and do not prove a diagnosis, patient condition, treatment need, or coding correctness.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.clinical-tables-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nlm.clinical-tables-api",
          "url": "https://clinicaltables.nlm.nih.gov/apidoc/conditions/v3/doc.html",
          "title": "Clinical Tables Search Service API documentation",
          "publisher": "U.S. National Library of Medicine",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nlm-learning-resources-api",
      "title": "NLM Learning Resources API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NLM Learning Resources API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nlm-learning-resources-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:a38649e99d80b01590cd244106111e97570e24544a58d503536b23d803560b65",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/nlm-learning-resources-api.json",
      "htmlPath": "/resources/view/public-data-apis/nlm-learning-resources-api",
      "facts": [
        {
          "id": "fact.nlm.learning-resources-api.access",
          "statement": "The NLM Learning Resources API returns public educational-resource, subject, format, authoring-organization, identifier, and search records as JSON.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.learning-resources-api"
          ]
        },
        {
          "id": "fact.nlm.learning-resources-api.authentication",
          "statement": "Documented reads require no credential and do not grant content authorship, course completion, certification, clinical, educational, or publication authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.learning-resources-api"
          ]
        },
        {
          "id": "fact.nlm.learning-resources-api.request",
          "statement": "Clients must select the documented resource collection or search route and bind identifiers, query terms, subjects, formats, and authoring-organization filters.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.learning-resources-api"
          ]
        },
        {
          "id": "fact.nlm.learning-resources-api.boundary",
          "statement": "Learning-resource metadata can change or link to external materials and does not prove medical accuracy for a case, availability, accreditation, suitability, or learner outcomes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.learning-resources-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nlm.learning-resources-api",
          "url": "https://learn.nlm.nih.gov/documentation/rest_uris/",
          "title": "NLM Learning Resources API documentation",
          "publisher": "U.S. National Library of Medicine",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.noaa-climate-data-online-api",
      "title": "NOAA Climate Data Online API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for NOAA Climate Data Online API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "noaa-climate-data-online-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:f38480b3eb3e6e0ff263ebde1abc2b25296e8c255d229383a256bb939663ca92",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/noaa-climate-data-online-api.json",
      "htmlPath": "/resources/view/public-data-apis/noaa-climate-data-online-api",
      "facts": [
        {
          "id": "fact.noaa.climate-data-online-api.access",
          "statement": "Climate Data Online web services v2 expose datasets, data categories, data types, locations, stations, and weather or climate observations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.climate-data-online-api"
          ]
        },
        {
          "id": "fact.noaa.climate-data-online-api.authentication",
          "statement": "Every request requires an access token and is subject to the documented per-second and daily request limits for that token.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.climate-data-online-api"
          ]
        },
        {
          "id": "fact.noaa.climate-data-online-api.request",
          "statement": "Clients must bind dataset, station or location, date range, units, paging limit, and offset and should not infer complete coverage from one response page.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.climate-data-online-api"
          ]
        },
        {
          "id": "fact.noaa.climate-data-online-api.boundary",
          "statement": "Observed climate records can contain station gaps, revisions, quality flags, and spatial limitations and do not by themselves establish present conditions or safety guidance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.climate-data-online-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.noaa.climate-data-online-api",
          "url": "https://www.ncdc.noaa.gov/cdo-web/webservices/v2",
          "title": "Climate Data Online Web Services v2",
          "publisher": "NOAA National Centers for Environmental Information",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.noaa-coops-api",
      "title": "NOAA CO-OPS Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NOAA CO-OPS Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "noaa-coops-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:ad36e96200af7de126ddf705f5d3f9101029e147da99efa24429b1630c574b7f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/noaa-coops-api.json",
      "htmlPath": "/resources/view/public-data-apis/noaa-coops-api",
      "facts": [
        {
          "id": "fact.noaa.coops-api.access",
          "statement": "NOAA Center for Operational Oceanographic Products and Services documents water levels, predictions, currents, meteorology, station, datum, and product data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.coops-api"
          ]
        },
        {
          "id": "fact.noaa.coops-api.authentication",
          "statement": "Documented reads are public and do not grant sensor, forecast, navigation, station, or NOAA publication authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.coops-api"
          ]
        },
        {
          "id": "fact.noaa.coops-api.request",
          "statement": "Clients must bind product, station, begin and end time, datum, time zone, units, interval, and format.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.coops-api"
          ]
        },
        {
          "id": "fact.noaa.coops-api.boundary",
          "statement": "Observations and predictions have station, datum, quality-control, outage, latency, and model limits and do not replace navigation or hazard guidance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.coops-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.noaa.coops-api",
          "url": "https://api.tidesandcurrents.noaa.gov/api/prod/",
          "title": "NOAA CO-OPS Data API documentation",
          "publisher": "NOAA Center for Operational Oceanographic Products and Services",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.noaa-ncei-access-data-service",
      "title": "NOAA NCEI Access Data Service boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for NOAA NCEI Access Data Service.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "noaa-ncei-access-data-service",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:3f831b58310ae3b54876f095a70a3a03bf3f02583b94570705ea285d9c46c502",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/noaa-ncei-access-data-service.json",
      "htmlPath": "/resources/view/public-data-apis/noaa-ncei-access-data-service",
      "facts": [
        {
          "id": "fact.noaa.ncei-access.access",
          "statement": "NCEI documents an HTTPS GET API for subsetting supported environmental datasets by station, time, datatype, bounding box, units, and format.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.ncei-access"
          ]
        },
        {
          "id": "fact.noaa.ncei-access.authentication",
          "statement": "Not every NCEI dataset is exposed by the service, and dataset-specific parameters must be checked before constructing a request.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.ncei-access"
          ]
        },
        {
          "id": "fact.noaa.ncei-access.request",
          "statement": "Supported output formats can include CSV, SSV, JSON, PDF, and NetCDF, but availability varies by dataset and requested fields.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.ncei-access"
          ]
        },
        {
          "id": "fact.noaa.ncei-access.boundary",
          "statement": "A 200 response does not prove sensor accuracy, station continuity, complete coverage, or that cloud migration has no availability impact.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.ncei-access"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.noaa.ncei-access",
          "url": "https://www.ncei.noaa.gov/support/access-data-service-api-user-documentation",
          "title": "NCEI Data Service API User Documentation",
          "publisher": "NOAA National Centers for Environmental Information",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.noaa-swpc-data",
      "title": "NOAA SWPC data services boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NOAA SWPC data services.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "noaa-swpc-data",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:2f37d8fb69e64ca56f3cea2eaf1bf8acc58ec1b5782c25f33c49cb3ba7e74d6b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/noaa-swpc-data.json",
      "htmlPath": "/resources/view/public-data-apis/noaa-swpc-data",
      "facts": [
        {
          "id": "fact.noaa.swpc-data.access",
          "statement": "NOAA Space Weather Prediction Center documents space-weather products, forecasts, alerts, observations, imagery, JSON feeds, and archives.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.swpc-data"
          ]
        },
        {
          "id": "fact.noaa.swpc-data.authentication",
          "statement": "Public data access does not grant alert issuance, forecast publication, instrument, satellite, or emergency authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.swpc-data"
          ]
        },
        {
          "id": "fact.noaa.swpc-data.request",
          "statement": "Clients must bind product family, issuance time, valid time, observation window, representation, and update cadence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.swpc-data"
          ]
        },
        {
          "id": "fact.noaa.swpc-data.boundary",
          "statement": "Products can be preliminary, model-dependent, revised, or event-driven and do not guarantee local technological effects or operational safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.noaa.swpc-data"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.noaa.swpc-data",
          "url": "https://www.spaceweather.gov/content/data-access",
          "title": "NOAA SWPC data services documentation",
          "publisher": "NOAA Space Weather Prediction Center",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nominatim-api",
      "title": "Nominatim API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Nominatim API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nominatim-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:b0f2da216da34c6076a8967a44e93b2e8968ec6be078a94463abae0912635000",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/nominatim-api.json",
      "htmlPath": "/resources/view/public-data-apis/nominatim-api",
      "facts": [
        {
          "id": "fact.osm.nominatim-api.access",
          "statement": "OpenStreetMap Nominatim documents OpenStreetMap-powered geocoding, reverse geocoding, lookup, search, and status responses.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osm.nominatim-api"
          ]
        },
        {
          "id": "fact.osm.nominatim-api.authentication",
          "statement": "Public instances have usage policies and no write authority; access does not grant mapping, address, identity, routing, or local-government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osm.nominatim-api"
          ]
        },
        {
          "id": "fact.osm.nominatim-api.request",
          "statement": "Clients must bind query or coordinates, country codes, layers, address details, language, geometry, result limit, and instance policy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osm.nominatim-api"
          ]
        },
        {
          "id": "fact.osm.nominatim-api.boundary",
          "statement": "Results inherit OpenStreetMap coverage, tagging, update, ranking, and geometry limits and do not prove postal deliverability, ownership, jurisdiction, or safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osm.nominatim-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.osm.nominatim-api",
          "url": "https://nominatim.org/release-docs/latest/api/Overview/",
          "title": "Nominatim API documentation",
          "publisher": "OpenStreetMap Nominatim",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.npm-registry-api",
      "title": "npm registry API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for npm registry API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "npm-registry-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:99aaf2b2b29844d4701aa124d21608f30ce6bec85c333cb3f65846acc5163976",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/npm-registry-api.json",
      "htmlPath": "/resources/view/public-data-apis/npm-registry-api",
      "facts": [
        {
          "id": "fact.npm.registry-api.access",
          "statement": "npm, Inc. documents package manifests, versions, distribution metadata, tarballs, tags, access rules, and registry configuration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.npm.registry-api"
          ]
        },
        {
          "id": "fact.npm.registry-api.authentication",
          "statement": "Public reads are separate from token-protected publish, unpublish, owner, or private-package operations; credentials must remain secret and access does not grant package ownership.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.npm.registry-api"
          ]
        },
        {
          "id": "fact.npm.registry-api.request",
          "statement": "Clients must bind registry base URL, scoped package encoding, version or tag, manifest, tarball integrity, authentication, cache, and client configuration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.npm.registry-api"
          ]
        },
        {
          "id": "fact.npm.registry-api.boundary",
          "statement": "Registry metadata and package presence can change or be publisher-controlled and do not prove author identity, code safety, maintenance, licensing, or compatibility.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.npm.registry-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.npm.registry-api",
          "url": "https://docs.npmjs.com/cli/v11/using-npm/registry/",
          "title": "npm registry API documentation",
          "publisher": "npm, Inc.",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nrel-developer-apis",
      "title": "NREL Developer APIs boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for NREL Developer APIs.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nrel-developer-apis",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:b5f8fbb8fb812030dc0523784b8fc829c79b5a05f99485537680314f8c856820",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/nrel-developer-apis.json",
      "htmlPath": "/resources/view/public-data-apis/nrel-developer-apis",
      "facts": [
        {
          "id": "fact.nrel.developer-apis.access",
          "statement": "The NREL Developer Network documents machine services for renewable-energy, transportation, buildings, utility-rate, geospatial, and National Solar Radiation Database data products.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nrel.developer-apis"
          ]
        },
        {
          "id": "fact.nrel.developer-apis.authentication",
          "statement": "Most documented calls require a developer API key, and service-specific requests can also require contact metadata; credentials and personal fields must stay outside public records and logs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nrel.developer-apis"
          ]
        },
        {
          "id": "fact.nrel.developer-apis.request",
          "statement": "Clients must use the selected service version and bind its required geometry, time, dataset, attributes, format, pacing, daily quota, and concurrent-request controls.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nrel.developer-apis"
          ]
        },
        {
          "id": "fact.nrel.developer-apis.boundary",
          "statement": "Modeled or measured energy data can have service-specific spatial, temporal, queue, methodology, and revision limits and does not prove project yield, economics, interconnection, compliance, or investment performance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nrel.developer-apis"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nrel.developer-apis",
          "url": "https://developer.nrel.gov/docs/",
          "title": "NREL Developer Network API Documentation",
          "publisher": "National Renewable Energy Laboratory",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nuget-v3-api",
      "title": "NuGet V3 API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NuGet V3 API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nuget-v3-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:b9ca6bda58c04f9c5a6b833e318355417ee7f7db41b364fa9445ed45da3b7cb0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/nuget-v3-api.json",
      "htmlPath": "/resources/view/public-data-apis/nuget-v3-api",
      "facts": [
        {
          "id": "fact.nuget.v3-api.access",
          "statement": "Microsoft NuGet documents service indexes, package metadata, registration, search, content, signatures, and catalog resources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nuget.v3-api"
          ]
        },
        {
          "id": "fact.nuget.v3-api.authentication",
          "statement": "Public feed reads are separate from authenticated package push or delete operations; access does not grant package ownership, signing, moderation, or Microsoft authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nuget.v3-api"
          ]
        },
        {
          "id": "fact.nuget.v3-api.request",
          "statement": "Clients must bind service index resource type, package ID, normalized version, registration page, search, paging, content URL, and cache headers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nuget.v3-api"
          ]
        },
        {
          "id": "fact.nuget.v3-api.boundary",
          "statement": "Feed presence, metadata, and signatures have scoped meanings and do not independently prove package safety, maintenance, license compatibility, or application suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nuget.v3-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nuget.v3-api",
          "url": "https://learn.microsoft.com/en-us/nuget/api/overview",
          "title": "NuGet V3 API documentation",
          "publisher": "Microsoft NuGet",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.nvd-cpe-api",
      "title": "NVD CPE API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for NVD CPE API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "nvd-cpe-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:9acb15197ff8a4dba8b605bd592941ca2bb201593e2eb85c834464c619ab35d2",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/nvd-cpe-api.json",
      "htmlPath": "/resources/view/public-data-apis/nvd-cpe-api",
      "facts": [
        {
          "id": "fact.nvd.cpe.api.access",
          "statement": "U.S. National Institute of Standards and Technology documents Common Platform Enumeration product records, match strings, identifiers, references, pagination, and documented API behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nvd.cpe.api"
          ]
        },
        {
          "id": "fact.nvd.cpe.api.authentication",
          "statement": "Public reads and API-key use do not grant product, vendor, vulnerability, federal, standards, or NIST authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nvd.cpe.api"
          ]
        },
        {
          "id": "fact.nvd.cpe.api.request",
          "statement": "Clients must bind CPE name or match criteria, product or vendor fields, date range, pagination, API key, rate guidance, and response version.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nvd.cpe.api"
          ]
        },
        {
          "id": "fact.nvd.cpe.api.boundary",
          "statement": "CPE matching and product metadata can be incomplete, generalized, delayed, or changed and do not prove software identity, presence, vulnerability, exploitability, support, or safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nvd.cpe.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nvd.cpe.api",
          "url": "https://nvd.nist.gov/developers/products",
          "title": "NVD CPE API documentation",
          "publisher": "U.S. National Institute of Standards and Technology",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.obis-api",
      "title": "Ocean Biodiversity Information System API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Ocean Biodiversity Information System API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "obis-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:96b4e7b7d9a675512cf4b1c910c2d56cf15ca16b160f0e422718d3322c973d0a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/obis-api.json",
      "htmlPath": "/resources/view/public-data-apis/obis-api",
      "facts": [
        {
          "id": "fact.obis.api.access",
          "statement": "The OBIS API exposes marine species occurrences, taxa, measurements, areas, datasets, nodes, checklists, maps, and aggregate statistics.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.obis.api"
          ]
        },
        {
          "id": "fact.obis.api.authentication",
          "statement": "Public reads require no user credential and do not grant dataset publication, species validation, provider, policy, or marine-management authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.obis.api"
          ]
        },
        {
          "id": "fact.obis.api.request",
          "statement": "Clients must bind taxon, geometry, area, depth, date, dataset, quality flags, fields, aggregation, limit, and offset and retain source dataset and occurrence identifiers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.obis.api"
          ]
        },
        {
          "id": "fact.obis.api.boundary",
          "statement": "Occurrence data can be biased, duplicated, misidentified, imprecise, historical, or quality-flagged and does not prove current presence, abundance, ecological status, or management suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.obis.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.obis.api",
          "url": "https://api.obis.org/",
          "title": "OBIS API documentation",
          "publisher": "Ocean Biodiversity Information System",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.oecd-sdmx-api",
      "title": "OECD SDMX API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for OECD SDMX API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "oecd-sdmx-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:13a59c2a95932eca8c8809ea3c4c6aa192a38aab3464e976f9e61a91b6134a1c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/oecd-sdmx-api.json",
      "htmlPath": "/resources/view/public-data-apis/oecd-sdmx-api",
      "facts": [
        {
          "id": "fact.oecd.sdmx-api.access",
          "statement": "OECD publishes an SDMX REST API for data, structure, and availability queries over named dataflows and keys.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.oecd.sdmx-api"
          ]
        },
        {
          "id": "fact.oecd.sdmx-api.authentication",
          "statement": "Clients should use read operations for public discovery and must not infer authorization for structure replacement, deletion, or append operations listed in the interface.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.oecd.sdmx-api"
          ]
        },
        {
          "id": "fact.oecd.sdmx-api.request",
          "statement": "Dataflow structure and provider identifiers are part of the query contract and must be resolved before interpreting observations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.oecd.sdmx-api"
          ]
        },
        {
          "id": "fact.oecd.sdmx-api.boundary",
          "statement": "A documented SDMX route does not prove a requested series exists, is current, is comparable across releases, or can be written by an anonymous client.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.oecd.sdmx-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.oecd.sdmx-api",
          "url": "https://sdmx.oecd.org/public/swagger/index.html?urls.primaryName=v2",
          "title": "OECD SDMX RESTful API",
          "publisher": "Organisation for Economic Co-operation and Development",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ofac-sanctions-list-service",
      "title": "OFAC Sanctions List Service boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for OFAC Sanctions List Service.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ofac-sanctions-list-service",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:01bc3f24ca8b42f81594e9c4f4b70991e96e2cc3e6636cca58c5386d245dde0e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/ofac-sanctions-list-service.json",
      "htmlPath": "/resources/view/public-data-apis/ofac-sanctions-list-service",
      "facts": [
        {
          "id": "fact.ofac.sanctions.list.service.access",
          "statement": "U.S. Department of the Treasury documents sanctions-list datasets, search, list files, identifiers, aliases, addresses, and machine-readable formats.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ofac.sanctions.list.service"
          ]
        },
        {
          "id": "fact.ofac.sanctions.list.service.authentication",
          "statement": "Public reads do not grant sanctions determination, screening, licensing, enforcement, identity matching, legal advice, or Treasury authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ofac.sanctions.list.service"
          ]
        },
        {
          "id": "fact.ofac.sanctions.list.service.request",
          "statement": "Clients must bind list, publication date, identifier, name or alias, address, program, file format, and update state.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ofac.sanctions.list.service"
          ]
        },
        {
          "id": "fact.ofac.sanctions.list.service.boundary",
          "statement": "List records and name matching require legal, temporal, and identity context; a possible match does not prove identity, prohibition, ownership, or required action.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ofac.sanctions.list.service"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ofac.sanctions.list.service",
          "url": "https://ofac.treasury.gov/sanctions-list-service",
          "title": "OFAC Sanctions List Service documentation",
          "publisher": "U.S. Department of the Treasury",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.open-canada-ckan-api",
      "title": "Open Government Canada CKAN API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Open Government Canada CKAN API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "open-canada-ckan-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:d4360370c5078e6ac34d2644c6bb65ad420b8e9c1729916eec82b3e310fb3f4c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/open-canada-ckan-api.json",
      "htmlPath": "/resources/view/public-data-apis/open-canada-ckan-api",
      "facts": [
        {
          "id": "fact.open.canada.ckan.api.access",
          "statement": "Government of Canada documents Canadian open-government datasets, records, organizations, resources, search, and CKAN metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.canada.ckan.api"
          ]
        },
        {
          "id": "fact.open.canada.ckan.api.authentication",
          "statement": "Public reads are separate from authenticated publication and do not grant dataset, department, record, disclosure, or Canadian-government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.canada.ckan.api"
          ]
        },
        {
          "id": "fact.open.canada.ckan.api.request",
          "statement": "Clients must bind action, dataset or organization identifier, language, query, filters, rows, start, fields, and resource link.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.canada.ckan.api"
          ]
        },
        {
          "id": "fact.open.canada.ckan.api.boundary",
          "statement": "Catalog records and resources can be revised, archived, incomplete, or publisher-supplied and do not prove accuracy, official interpretation, or availability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.canada.ckan.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.open.canada.ckan.api",
          "url": "https://open.canada.ca/en/access-our-application-programming-interface-api",
          "title": "Open Government Canada CKAN API documentation",
          "publisher": "Government of Canada",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.open-food-facts-api",
      "title": "Open Food Facts API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Open Food Facts API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "open-food-facts-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:9a00d80e446fa25fca09c6956716cc3bc9aa5ae14e0723979a5a5756290956bc",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/open-food-facts-api.json",
      "htmlPath": "/resources/view/public-data-apis/open-food-facts-api",
      "facts": [
        {
          "id": "fact.open.food.facts.api.access",
          "statement": "Open Food Facts documents food product, barcode, ingredient, nutrition, label, image, category, search, and taxonomy data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.food.facts.api"
          ]
        },
        {
          "id": "fact.open.food.facts.api.authentication",
          "statement": "Public reads are separate from authenticated edits; access does not grant manufacturer, product, health, regulatory, labeling, or Open Food Facts authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.food.facts.api"
          ]
        },
        {
          "id": "fact.open.food.facts.api.request",
          "statement": "Clients must bind barcode, locale, product fields, search filters, taxonomy, page, result size, image, and authentication for writes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.food.facts.api"
          ]
        },
        {
          "id": "fact.open.food.facts.api.boundary",
          "statement": "Community-contributed product data can be incomplete, outdated, erroneous, market-specific, or changed and does not prove safety, ingredients, compliance, or health effects.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.food.facts.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.open.food.facts.api",
          "url": "https://openfoodfacts.github.io/openfoodfacts-server/api/",
          "title": "Open Food Facts API documentation",
          "publisher": "Open Food Facts",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.open-meteo-api",
      "title": "Open-Meteo API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Open-Meteo API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "open-meteo-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:e97a1fb8ead3f9157e660bd0ad867b30618e88879f6d63c57a9bf1bc325cf0a0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/open-meteo-api.json",
      "htmlPath": "/resources/view/public-data-apis/open-meteo-api",
      "facts": [
        {
          "id": "fact.open.meteo.api.access",
          "statement": "Open-Meteo documents forecast, historical, climate, marine, air-quality, elevation, geocoding, and model-derived weather data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.meteo.api"
          ]
        },
        {
          "id": "fact.open.meteo.api.authentication",
          "statement": "Public and commercial access tiers differ; reads do not grant forecast, warning, model, observation, or Open-Meteo publication authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.meteo.api"
          ]
        },
        {
          "id": "fact.open.meteo.api.request",
          "statement": "Clients must bind coordinates, model, variable, time zone, date range, forecast horizon, units, format, and rate tier.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.meteo.api"
          ]
        },
        {
          "id": "fact.open.meteo.api.boundary",
          "statement": "Model outputs have initialization, resolution, bias, update, and uncertainty limits and do not replace official warnings, local observations, or safety decisions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.open.meteo.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.open.meteo.api",
          "url": "https://open-meteo.com/en/docs",
          "title": "Open-Meteo API documentation",
          "publisher": "Open-Meteo",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.open-targets-graphql-api",
      "title": "Open Targets Platform GraphQL API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Open Targets Platform GraphQL API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "open-targets-graphql-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:3813abc022d920607324c1be582d8b84f6dd1ba26fd27c7227a749a000b469cc",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/open-targets-graphql-api.json",
      "htmlPath": "/resources/view/public-data-apis/open-targets-graphql-api",
      "facts": [
        {
          "id": "fact.opentargets.graphql-api.access",
          "statement": "The Open Targets GraphQL API exposes target, disease, evidence, association, drug, study, variant, ontology, and supporting platform data through typed queries.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opentargets.graphql-api"
          ]
        },
        {
          "id": "fact.opentargets.graphql-api.authentication",
          "statement": "Public GraphQL reads require no user credential and do not grant data-provider, curation, drug-development, clinical, or target-validation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opentargets.graphql-api"
          ]
        },
        {
          "id": "fact.opentargets.graphql-api.request",
          "statement": "Clients must declare exact fields, identifiers, filters, pagination, nested relationships, and bounded query complexity and should follow platform release and rate guidance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opentargets.graphql-api"
          ]
        },
        {
          "id": "fact.opentargets.graphql-api.boundary",
          "statement": "Associations integrate heterogeneous evidence and scoring models and do not prove causation, tractability, safety, efficacy, biomarker validity, or clinical recommendation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opentargets.graphql-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.opentargets.graphql-api",
          "url": "https://platform-docs.opentargets.org/data-access/graphql-api",
          "title": "Open Targets GraphQL API",
          "publisher": "Open Targets",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.openalex-api",
      "title": "OpenAlex research graph API boundary",
      "summary": "Documented OpenAlex JSON graph access, optional API-key trial, list pagination, identifier lookup and untrusted-text handling; API availability, detailed rate budgets and reuse terms were not tested by this documentation review.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "openalex-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T16:39:32.981Z",
      "contentHash": "sha256:a0de340d236db5325a6b00b37ee700ee7ab5550ba1669b5f4674fd274082c20b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T16:39:32.981Z"
      },
      "jsonPath": "/resources/public-data-apis/openalex-api.json",
      "htmlPath": "/resources/view/public-data-apis/openalex-api",
      "facts": [
        {
          "id": "fact.openalex.api.access",
          "statement": "OpenAlex documents JSON research-graph access at https://api.openalex.org, with entity routes such as /works, /authors and /sources. ID-based filters avoid ambiguous names, and nested entity stubs require a separate read for full details.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openalex.api"
          ]
        },
        {
          "id": "fact.openalex.api.authentication",
          "statement": "The API overview describes free trial access without an account or key, with an optional api_key query parameter. It directs clients to Authentication for detailed key and rate-limit rules.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openalex.api"
          ]
        },
        {
          "id": "fact.openalex.api.request",
          "statement": "List responses contain meta, results and group_by. The documented page size defaults to 25 and is capped at 100; meta.count is the matching total, while meta.page and meta.per_page describe the returned page.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openalex.api"
          ]
        },
        {
          "id": "fact.openalex.api.boundary",
          "statement": "Titles, abstracts and affiliation strings originate outside OpenAlex and are passed through unsanitized. The security guidance treats them as untrusted text and calls for output-appropriate escaping or equivalent safe handling.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openalex.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.openalex.api",
          "url": "https://help.openalex.org/api/",
          "title": "OpenAlex API reference",
          "publisher": "OurResearch",
          "observedAt": "2026-09-06T16:39:32.981Z"
        }
      ]
    },
    {
      "id": "resource.public-data.openaq-api",
      "title": "OpenAQ API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for OpenAQ API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "openaq-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:46f4e6afce52e9464cba6aacbf15a17d2cd36c4d0e60fa927ea0daf030692992",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/openaq-api.json",
      "htmlPath": "/resources/view/public-data-apis/openaq-api",
      "facts": [
        {
          "id": "fact.openaq.api.access",
          "statement": "OpenAQ documents air-quality locations, sensors, measurements, parameters, providers, owners, countries, and aggregates.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openaq.api"
          ]
        },
        {
          "id": "fact.openaq.api.authentication",
          "statement": "Requests follow the documented API-key and rate rules; access does not grant provider, sensor, regulatory, health, or source-data authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openaq.api"
          ]
        },
        {
          "id": "fact.openaq.api.request",
          "statement": "Clients must bind location, sensor, parameter, owner, provider, country, coordinates, time, aggregation, paging, and key handling.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openaq.api"
          ]
        },
        {
          "id": "fact.openaq.api.boundary",
          "statement": "Measurements come from heterogeneous providers and can be delayed, invalidated, sparse, or non-regulatory and do not prove personal exposure, compliance, or health outcome.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openaq.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.openaq.api",
          "url": "https://docs.openaq.org/",
          "title": "OpenAQ API documentation",
          "publisher": "OpenAQ",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.openfda-api",
      "title": "openFDA API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for openFDA API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "openfda-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:4ba7e9da61becd43bb11252785b3bc597a0cbbb4a6e268677d67040ace5d5456",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/openfda-api.json",
      "htmlPath": "/resources/view/public-data-apis/openfda-api",
      "facts": [
        {
          "id": "fact.fda.openfda-api.access",
          "statement": "openFDA exposes Elasticsearch-backed public datasets about drugs, devices, foods, and other FDA-regulated products through endpoint-specific JSON APIs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fda.openfda-api"
          ]
        },
        {
          "id": "fact.fda.openfda-api.authentication",
          "statement": "HTTPS requests can use a free API key for a higher daily allowance, while unauthenticated access is more limited and remains subject to published throttles.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fda.openfda-api"
          ]
        },
        {
          "id": "fact.fda.openfda-api.request",
          "statement": "Clients must bind endpoint, search expression, count or limit, skip, and pagination behavior explicitly and must not publish an API key in a resource record.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fda.openfda-api"
          ]
        },
        {
          "id": "fact.fda.openfda-api.boundary",
          "statement": "openFDA data can be incomplete, duplicated, delayed, or unsuitable for clinical use and does not establish causation, product safety, or individualized medical advice.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fda.openfda-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.fda.openfda-api",
          "url": "https://open.fda.gov/apis/",
          "title": "openFDA APIs",
          "publisher": "U.S. Food and Drug Administration",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.openfec-api",
      "title": "OpenFEC API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for OpenFEC API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "openfec-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:87cec5a4be78b4fb416cb81c9f7e66f688ad9408c0eb007c781e9a87bdb32cde",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/openfec-api.json",
      "htmlPath": "/resources/view/public-data-apis/openfec-api",
      "facts": [
        {
          "id": "fact.fec.openfec-api.access",
          "statement": "OpenFEC exposes campaign-finance reports, filings, committees, candidates, schedules, electioneering communications, and supporting lookup data through versioned public endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fec.openfec-api"
          ]
        },
        {
          "id": "fact.fec.openfec-api.authentication",
          "statement": "Requests use a data.gov API key, which is a credential and must remain outside public records; access does not grant filing, amendment, enforcement, or FEC decision authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fec.openfec-api"
          ]
        },
        {
          "id": "fact.fec.openfec-api.request",
          "statement": "Clients must bind the documented endpoint, election cycle, entity identifiers, filing or transaction filters, sorting, pagination, and response fields while respecting service limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fec.openfec-api"
          ]
        },
        {
          "id": "fact.fec.openfec-api.boundary",
          "statement": "FEC records can be amended, administratively processed, or reported by filers and do not independently prove legal compliance, beneficial ownership, intent, or final enforcement status.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fec.openfec-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.fec.openfec-api",
          "url": "https://api.open.fec.gov/developers/",
          "title": "OpenFEC API documentation",
          "publisher": "U.S. Federal Election Commission",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.openfema-api",
      "title": "OpenFEMA API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for OpenFEMA API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "openfema-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:990e60661a7d616bb87e03c67f06de5f5bd0e00f3fa6f5e8f5c5af3aa82d5b56",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/openfema-api.json",
      "htmlPath": "/resources/view/public-data-apis/openfema-api",
      "facts": [
        {
          "id": "fact.fema.openfema-api.access",
          "statement": "OpenFEMA provides public dataset metadata, downloadable files, and RESTful API access to FEMA program and disaster-related datasets.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fema.openfema-api"
          ]
        },
        {
          "id": "fact.fema.openfema-api.authentication",
          "statement": "The public API does not require registration or an API key, but public access does not authorize FEMA operational, case-management, assistance, or administrative actions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fema.openfema-api"
          ]
        },
        {
          "id": "fact.fema.openfema-api.request",
          "statement": "Clients must select a dataset and version and use supported filtering, field selection, ordering, top, skip, and metadata options to bound retrieval and pagination.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fema.openfema-api"
          ]
        },
        {
          "id": "fact.fema.openfema-api.boundary",
          "statement": "OpenFEMA datasets have dataset-specific refresh, scope, suppression, and quality limits and do not establish personal eligibility, present emergency conditions, or an official response instruction.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.fema.openfema-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.fema.openfema-api",
          "url": "https://www.fema.gov/about/openfema/api",
          "title": "OpenFEMA API",
          "publisher": "U.S. Federal Emergency Management Agency",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.openml-api",
      "title": "OpenML API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for OpenML API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "openml-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:59e7f893d5a3d73c45dada5c805096d57b987178b9c729fc451ff6ca130ce27f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/openml-api.json",
      "htmlPath": "/resources/view/public-data-apis/openml-api",
      "facts": [
        {
          "id": "fact.openml.api.access",
          "statement": "OpenML documents machine-learning datasets, tasks, flows, runs, evaluations, studies, files, and metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openml.api"
          ]
        },
        {
          "id": "fact.openml.api.authentication",
          "statement": "Public reads are separate from authenticated uploads and edits; access does not grant dataset, task, run, model, benchmark, or OpenML authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openml.api"
          ]
        },
        {
          "id": "fact.openml.api.request",
          "statement": "Clients must bind resource type and ID, dataset version, task, flow, run, evaluation measure, file, API key, and pagination.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openml.api"
          ]
        },
        {
          "id": "fact.openml.api.boundary",
          "statement": "Contributor-supplied data and results can be incomplete, incompatible, duplicated, biased, or invalid and do not prove reproducibility, fairness, safety, or benchmark superiority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openml.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.openml.api",
          "url": "https://www.openml.org/api_docs",
          "title": "OpenML API documentation",
          "publisher": "OpenML",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.opensky-network-api",
      "title": "OpenSky Network REST API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for OpenSky Network REST API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "opensky-network-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:004740a15dca358a99e8a3f44a728852bfffbd3fcd3ae6ec2e7c769d9ba8937b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/opensky-network-api.json",
      "htmlPath": "/resources/view/public-data-apis/opensky-network-api",
      "facts": [
        {
          "id": "fact.opensky.network-api.access",
          "statement": "OpenSky Network documents aircraft state vectors, flights, tracks, arrivals, departures, and sensor-derived metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opensky.network-api"
          ]
        },
        {
          "id": "fact.opensky.network-api.authentication",
          "statement": "Anonymous and authenticated limits differ; credentials must remain secret, and access does not grant air-traffic, aircraft, identity, tracking, or safety authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opensky.network-api"
          ]
        },
        {
          "id": "fact.opensky.network-api.request",
          "statement": "Clients must bind time, airport, aircraft ICAO address, geographic bounds, category, paging, authentication, and rate limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opensky.network-api"
          ]
        },
        {
          "id": "fact.opensky.network-api.boundary",
          "statement": "Crowdsourced surveillance coverage can be incomplete, delayed, erroneous, or privacy-limited and does not prove identity, ownership, flight legality, or navigation safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opensky.network-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.opensky.network-api",
          "url": "https://openskynetwork.github.io/opensky-api/",
          "title": "OpenSky Network REST API documentation",
          "publisher": "OpenSky Network",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.openstreetmap-overpass-api",
      "title": "OpenStreetMap Overpass API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for OpenStreetMap Overpass API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "openstreetmap-overpass-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:41eb2bdc1458287987129d43577d5bb48e6c8875fc5d94565400fcc7cde78e3f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/openstreetmap-overpass-api.json",
      "htmlPath": "/resources/view/public-data-apis/openstreetmap-overpass-api",
      "facts": [
        {
          "id": "fact.openstreetmap.overpass-api.access",
          "statement": "Overpass API provides read-only filtering of OpenStreetMap nodes, ways, relations, and tags using its own query language.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openstreetmap.overpass-api"
          ]
        },
        {
          "id": "fact.openstreetmap.overpass-api.authentication",
          "statement": "Public instances are shared services with usage policies, resource limits, and no guarantee that one endpoint can support bulk or high-rate workloads.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openstreetmap.overpass-api"
          ]
        },
        {
          "id": "fact.openstreetmap.overpass-api.request",
          "statement": "The main OpenStreetMap editing API has different write, authentication, import, and automated-edit rules and must not be inferred from Overpass read access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openstreetmap.overpass-api"
          ]
        },
        {
          "id": "fact.openstreetmap.overpass-api.boundary",
          "statement": "OpenStreetMap data is community maintained and licensed; query results do not prove current ground truth, completeness, or permission for an automated edit.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.openstreetmap.overpass-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.openstreetmap.overpass-api",
          "url": "https://wiki.openstreetmap.org/wiki/Overpass_API",
          "title": "Overpass API",
          "publisher": "OpenStreetMap community",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.opentopography-api",
      "title": "OpenTopography API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for OpenTopography API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "opentopography-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:570d763e154adb5a5ada5aaabad22fa33a2be372205d234af3a591ee80ecfef8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/opentopography-api.json",
      "htmlPath": "/resources/view/public-data-apis/opentopography-api",
      "facts": [
        {
          "id": "fact.opentopography.api.access",
          "statement": "OpenTopography documents global raster topography, lidar, point-cloud, processing, and documented data-access services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opentopography.api"
          ]
        },
        {
          "id": "fact.opentopography.api.authentication",
          "statement": "Requests can require API keys or account permissions; reads do not grant survey, dataset, terrain, processing, or OpenTopography authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opentopography.api"
          ]
        },
        {
          "id": "fact.opentopography.api.request",
          "statement": "Clients must bind dataset, bounding geometry, resolution, output format, processing option, API key, quota, and attribution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opentopography.api"
          ]
        },
        {
          "id": "fact.opentopography.api.boundary",
          "statement": "Topographic products vary by source, acquisition, datum, resolution, voids, processing, and license and do not prove current terrain, hazard, or survey accuracy.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opentopography.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.opentopography.api",
          "url": "https://www.opentopography.org/developers",
          "title": "OpenTopography API documentation",
          "publisher": "OpenTopography",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.orcid-public-api",
      "title": "ORCID Public API boundary",
      "summary": "Official search tutorial covering public metadata, result types, token requirements and paging. Documentation-only: no researcher record, identity or commercial-use permission has been verified.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "orcid-public-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T18:19:35.635Z",
      "contentHash": "sha256:fe07fdef261c6fc6c87f42b7a4b5124f68ec6f60252c4863bfb42ef5390484f1",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T18:19:35.635Z"
      },
      "jsonPath": "/resources/public-data-apis/orcid-public-api.json",
      "htmlPath": "/resources/view/public-data-apis/orcid-public-api",
      "facts": [
        {
          "id": "fact.orcid.public-api.access",
          "statement": "Public v3.0 search uses pub.orcid.org in production or pub.sandbox.orcid.org in the sandbox. Basic search returns matching public-record IDs; expanded-search can return public metadata including names, email and institution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.orcid.public-api"
          ]
        },
        {
          "id": "fact.orcid.public-api.authentication",
          "statement": "Programmatic public/member search uses client-credentials OAuth with /read-public. The tutorial separately documents public CSV search in a browser without API credentials.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.orcid.public-api"
          ]
        },
        {
          "id": "fact.orcid.public-api.request",
          "statement": "Public API search is capped at 10,000 results. Both public and member searches default to 1000 results per page and allow at most 1000 per page; start and rows select the offset and page size.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.orcid.public-api"
          ]
        },
        {
          "id": "fact.orcid.public-api.boundary",
          "statement": "Queries use Solr syntax: field:value narrows a field and uppercase AND/OR combines keywords; lowercase and/or are ordinary search terms. XML and JSON responses are supported.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.orcid.public-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.orcid.public-api",
          "url": "https://info.orcid.org/documentation/api-tutorials/api-tutorial-searching-the-orcid-registry/",
          "title": "Searching the ORCID registry",
          "publisher": "ORCID",
          "observedAt": "2026-09-06T18:19:35.635Z"
        }
      ]
    },
    {
      "id": "resource.public-data.osrm-api",
      "title": "OSRM HTTP API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for OSRM HTTP API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "osrm-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:a522c8cb2b60dec818bc481750d12d3064ce993d3541b160b2b1505ae4a80186",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/osrm-api.json",
      "htmlPath": "/resources/view/public-data-apis/osrm-api",
      "facts": [
        {
          "id": "fact.osrm.api.access",
          "statement": "Project OSRM documents route, nearest, table, match, trip, tile, and service metadata over a configured road graph.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osrm.api"
          ]
        },
        {
          "id": "fact.osrm.api.authentication",
          "statement": "Public or self-hosted reads do not grant map editing, navigation, traffic, vehicle, dispatch, or road-authority permissions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osrm.api"
          ]
        },
        {
          "id": "fact.osrm.api.request",
          "statement": "Clients must bind service, profile, coordinates, bearings, radiuses, alternatives, annotations, overview, steps, and response format.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osrm.api"
          ]
        },
        {
          "id": "fact.osrm.api.boundary",
          "statement": "Routes depend on the loaded OpenStreetMap extract, profile, preprocessing, and absent live conditions and do not prove legality, accessibility, safety, or travel time.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osrm.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.osrm.api",
          "url": "https://project-osrm.org/docs/v5.24.0/api/",
          "title": "OSRM HTTP API documentation",
          "publisher": "Project OSRM",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.osv-api",
      "title": "OSV API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for OSV API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "osv-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:709edd295df507976c09f68f21418321b0c01de052b9131e9c4a1f6917f9511d",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/osv-api.json",
      "htmlPath": "/resources/view/public-data-apis/osv-api",
      "facts": [
        {
          "id": "fact.osv.api.access",
          "statement": "Google Open Source Vulnerabilities documents open-source vulnerability records, package/version queries, batch queries, affected ranges, aliases, and events.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osv.api"
          ]
        },
        {
          "id": "fact.osv.api.authentication",
          "statement": "Public reads do not grant advisory editing, package ownership, vulnerability validation, remediation, or Google authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osv.api"
          ]
        },
        {
          "id": "fact.osv.api.request",
          "statement": "Clients must bind ecosystem, package, version, commit, query batch, pagination token, schema version, and aliases.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osv.api"
          ]
        },
        {
          "id": "fact.osv.api.boundary",
          "statement": "OSV aggregates upstream advisories with varying coverage and timing; results do not prove exploitability, reachability, compromise, or absence of vulnerabilities.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.osv.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.osv.api",
          "url": "https://google.github.io/osv.dev/api/",
          "title": "OSV API documentation",
          "publisher": "Google Open Source Vulnerabilities",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.packagist-api",
      "title": "Packagist API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Packagist API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "packagist-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:8a74bd97b90ca1a776dbd2ad7b9a4950843338b66e36e33ec1b3576d15e705a6",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/packagist-api.json",
      "htmlPath": "/resources/view/public-data-apis/packagist-api",
      "facts": [
        {
          "id": "fact.packagist.api.access",
          "statement": "Packagist documents Composer package search, metadata, providers, versions, distribution, and change feeds.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.packagist.api"
          ]
        },
        {
          "id": "fact.packagist.api.authentication",
          "statement": "Public reads are separate from authenticated package submission, ownership, deletion, or Packagist administration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.packagist.api"
          ]
        },
        {
          "id": "fact.packagist.api.request",
          "statement": "Clients must bind package or vendor name, search query, result page, metadata fields, provider hash, and cache expectations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.packagist.api"
          ]
        },
        {
          "id": "fact.packagist.api.boundary",
          "statement": "Package metadata and distribution links can change and do not prove publisher identity, code safety, maintenance, license compatibility, or suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.packagist.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.packagist.api",
          "url": "https://packagist.org/apidoc",
          "title": "Packagist API documentation",
          "publisher": "Packagist",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.pdbe-api",
      "title": "PDBe API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for PDBe API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "pdbe-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:97ec9403d7ebdb1f115bf3fa3ecb29b9510f6227f4c2f44b24346fd1573ac73d",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/pdbe-api.json",
      "htmlPath": "/resources/view/public-data-apis/pdbe-api",
      "facts": [
        {
          "id": "fact.ebi.pdbe-api.access",
          "statement": "PDBe APIs expose PDB entry, experiment, assembly, molecule, residue, mapping, validation, search, and related structural-biology metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.pdbe-api"
          ]
        },
        {
          "id": "fact.ebi.pdbe-api.authentication",
          "statement": "Public reads require no user credential and do not grant deposition, remediation, release, archive, or scientific-validation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.pdbe-api"
          ]
        },
        {
          "id": "fact.ebi.pdbe-api.request",
          "statement": "Clients must bind PDB or external identifiers, endpoint family, entity or residue scope, fields, mappings, batch size, and returned status and validation data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.pdbe-api"
          ]
        },
        {
          "id": "fact.ebi.pdbe-api.boundary",
          "statement": "Deposited structures and mappings can be revised, superseded, method-limited, incomplete, or model-dependent and do not prove physiological state, function, or clinical effect.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.pdbe-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.pdbe-api",
          "url": "https://www.ebi.ac.uk/pdbe/pdbe-rest-api",
          "title": "PDBe REST API",
          "publisher": "Protein Data Bank in Europe",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.poland-bdl-api",
      "title": "Statistics Poland Local Data Bank API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Statistics Poland Local Data Bank API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "poland-bdl-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:79e5a854cc4b9a8237870e9a53019ee03191e8379c2b20c6da9975aae9081a7f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/poland-bdl-api.json",
      "htmlPath": "/resources/view/public-data-apis/poland-bdl-api",
      "facts": [
        {
          "id": "fact.pl.bdl-api.access",
          "statement": "The Local Data Bank API exposes Polish territorial units, variables, subjects, measures, attributes, and official local-statistics observations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pl.bdl-api"
          ]
        },
        {
          "id": "fact.pl.bdl-api.authentication",
          "statement": "Public or registered access tiers follow the official service policy, and any key must remain outside public records; access does not grant respondent, publication, or dataset-editing authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pl.bdl-api"
          ]
        },
        {
          "id": "fact.pl.bdl-api.request",
          "statement": "Clients must bind API version, language, territorial level and unit, variable, year, page, and format and handle service limits and code-list changes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pl.bdl-api"
          ]
        },
        {
          "id": "fact.pl.bdl-api.boundary",
          "statement": "Local statistics can be revised, suppressed, reclassified, aggregated, or affected by territorial changes and do not prove individual facts, causation, or direct comparability across vintages.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pl.bdl-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.pl.bdl-api",
          "url": "https://api.stat.gov.pl/Home/BdlApi",
          "title": "Local Data Bank API",
          "publisher": "Statistics Poland",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.pride-archive-api",
      "title": "PRIDE Archive API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for PRIDE Archive API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "pride-archive-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:c2424f42d65ef0e7b16926940b02478bd4cfba0115938266d08604994f4d67f6",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/pride-archive-api.json",
      "htmlPath": "/resources/view/public-data-apis/pride-archive-api",
      "facts": [
        {
          "id": "fact.ebi.pride-api.access",
          "statement": "PRIDE Archive API v2 exposes public proteomics projects, assays, files, organisms, tissues, instruments, modifications, keywords, and related repository metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.pride-api"
          ]
        },
        {
          "id": "fact.ebi.pride-api.authentication",
          "statement": "Public reads require no user credential and do not grant submission, reviewer, embargo, curator, publication, or data-ownership authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.pride-api"
          ]
        },
        {
          "id": "fact.ebi.pride-api.request",
          "statement": "Clients must bind project accession, assay, filters, fields, sorting, page, page size, and file metadata and handle private, announced, public, and obsolete states correctly.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.pride-api"
          ]
        },
        {
          "id": "fact.ebi.pride-api.boundary",
          "statement": "Repository metadata and files are submitter-provided and can be revised, reprocessed, incomplete, or heterogeneous and do not prove identification quality, abundance, reproducibility, or biological effect.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.pride-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.pride-api",
          "url": "https://www.ebi.ac.uk/pride/ws/archive/v2/swagger-ui.html",
          "title": "PRIDE Archive API v2",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.protocols-io-api",
      "title": "protocols.io API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for protocols.io API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "protocols-io-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:049af425836bd1eac6526347d4e0abdce47bd3dc947c791120306c9fd1ad649e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/protocols-io-api.json",
      "htmlPath": "/resources/view/public-data-apis/protocols-io-api",
      "facts": [
        {
          "id": "fact.protocols.io.api.access",
          "statement": "protocols.io documents protocol, step, material, workspace, collection, file, comment, and supporting API records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.protocols.io.api"
          ]
        },
        {
          "id": "fact.protocols.io.api.authentication",
          "statement": "Requests require documented OAuth or application credentials where applicable; reads do not grant protocol ownership, publication, execution, validation, or protocols.io authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.protocols.io.api"
          ]
        },
        {
          "id": "fact.protocols.io.api.request",
          "statement": "Clients must bind API version, resource identifier, workspace or collection, visibility, pagination, credential, representation, and update state.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.protocols.io.api"
          ]
        },
        {
          "id": "fact.protocols.io.api.boundary",
          "statement": "Published protocols can be revised, incomplete, access-limited, or unvalidated and do not prove experimental reproducibility, safety, authorship, or outcome.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.protocols.io.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.protocols.io.api",
          "url": "https://apidoc.protocols.io/",
          "title": "protocols.io API documentation",
          "publisher": "protocols.io",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.pubchem-pug-rest-api",
      "title": "PubChem PUG REST API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for PubChem PUG REST API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "pubchem-pug-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:1824da14e0b012dbce7115726716ee9c9f36d84bc872a8af90fe5dc2357d9329",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/pubchem-pug-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/pubchem-pug-rest-api",
      "facts": [
        {
          "id": "fact.ncbi.pubchem-pug-rest-api.access",
          "statement": "PubChem PUG REST exposes compounds, substances, assays, genes, proteins, pathways, taxonomies, cells, properties, identifiers, and related operations through a URL-based API.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.pubchem-pug-rest-api"
          ]
        },
        {
          "id": "fact.ncbi.pubchem-pug-rest-api.authentication",
          "statement": "The shared public service offers no API keys or whitelisting for higher volume, and public retrieval grants no record-deposit, curation, clinical, or regulatory authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.pubchem-pug-rest-api"
          ]
        },
        {
          "id": "fact.ncbi.pubchem-pug-rest-api.request",
          "statement": "Clients must bind input domain and identifier, operation, output format, options, list-key paging, and correct POST content type and remain at or below five requests per second.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.pubchem-pug-rest-api"
          ]
        },
        {
          "id": "fact.ncbi.pubchem-pug-rest-api.boundary",
          "statement": "PubChem records aggregate submitted and computed chemical information that can change or conflict and do not prove compound identity in a specimen, safety, efficacy, legal status, or medical suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ncbi.pubchem-pug-rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ncbi.pubchem-pug-rest-api",
          "url": "https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest",
          "title": "PubChem PUG REST",
          "publisher": "U.S. National Library of Medicine",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.public-suffix-list",
      "title": "Public Suffix List boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Public Suffix List.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "public-suffix-list",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:f4228d4214680a0a6fe5c4834d7f16fc5a4afc7ea8cf54958336850eeebb04e7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/public-suffix-list.json",
      "htmlPath": "/resources/view/public-data-apis/public-suffix-list",
      "facts": [
        {
          "id": "fact.public.suffix.list.access",
          "statement": "Mozilla / Public Suffix List community documents the public suffix data file, rule syntax, test data, update process, and documented download locations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.public.suffix.list"
          ]
        },
        {
          "id": "fact.public.suffix.list.authentication",
          "statement": "Public reads do not grant suffix-list maintenance, domain, registry, browser, certificate, policy, or Mozilla authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.public.suffix.list"
          ]
        },
        {
          "id": "fact.public.suffix.list.request",
          "statement": "Clients must bind list version or retrieval time, exact rule, exception or wildcard handling, IDN representation, update state, and client parsing behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.public.suffix.list"
          ]
        },
        {
          "id": "fact.public.suffix.list.boundary",
          "statement": "Community-maintained suffix rules can change and do not prove domain ownership, registry status, organizational identity, cookie safety, certificate validity, or policy compliance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.public.suffix.list"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.public.suffix.list",
          "url": "https://publicsuffix.org/list/",
          "title": "Public Suffix List documentation",
          "publisher": "Mozilla / Public Suffix List community",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.pypi-json-api",
      "title": "PyPI JSON API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for PyPI JSON API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "pypi-json-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:f7de559d906d78e977d3f1ff425c007175a5d1564fc70d02109e895fbcc8adba",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/pypi-json-api.json",
      "htmlPath": "/resources/view/public-data-apis/pypi-json-api",
      "facts": [
        {
          "id": "fact.pypi.json-api.access",
          "statement": "Python Package Index documents Python project metadata, releases, files, hashes, vulnerabilities, and selected index information.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pypi.json-api"
          ]
        },
        {
          "id": "fact.pypi.json-api.authentication",
          "statement": "Public reads are separate from authenticated publication; access does not grant project ownership, release upload, signing, moderation, or Python Packaging Authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pypi.json-api"
          ]
        },
        {
          "id": "fact.pypi.json-api.request",
          "statement": "Clients must bind project name, optional version, normalized identifier, response fields, file URL, hash, yanked state, and cache behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pypi.json-api"
          ]
        },
        {
          "id": "fact.pypi.json-api.boundary",
          "statement": "Package metadata is publisher-supplied and mutable, and published files can be yanked or compromised; API presence does not prove safety, maintenance, or suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.pypi.json-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.pypi.json-api",
          "url": "https://docs.pypi.org/api/json/",
          "title": "PyPI JSON API documentation",
          "publisher": "Python Package Index",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.quickgo-api",
      "title": "QuickGO API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for QuickGO API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "quickgo-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:a01e8009b18e6aa98634a496656d35b68491597ff5c258b4e434de12959ab2cc",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/quickgo-api.json",
      "htmlPath": "/resources/view/public-data-apis/quickgo-api",
      "facts": [
        {
          "id": "fact.ebi.quickgo-api.access",
          "statement": "QuickGO REST APIs expose Gene Ontology terms, relations, annotations, evidence codes, gene products, taxon constraints, statistics, and downloadable result sets.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.quickgo-api"
          ]
        },
        {
          "id": "fact.ebi.quickgo-api.authentication",
          "statement": "Public reads require no user credential and do not grant ontology editing, annotation submission, curation, release, or biological-interpretation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.quickgo-api"
          ]
        },
        {
          "id": "fact.ebi.quickgo-api.request",
          "statement": "Clients must bind GO identifiers, gene products, taxa, evidence, qualifiers, references, aspects, extensions, fields, limits, paging, and release context.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.quickgo-api"
          ]
        },
        {
          "id": "fact.ebi.quickgo-api.boundary",
          "statement": "Annotations can be inferred, predicted, negated, qualifier-dependent, or revised and do not prove direct experimental function, expression, phenotype, causation, or clinical significance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.quickgo-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.quickgo-api",
          "url": "https://www.ebi.ac.uk/QuickGO/api/index.html",
          "title": "QuickGO REST API",
          "publisher": "European Bioinformatics Institute",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.rcsb-pdb-data-api",
      "title": "RCSB PDB Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for RCSB PDB Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "rcsb-pdb-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:cc147f3602bf8e5221c346bd6373f6a52e9a9e43c113fca5a710a3e31bbb3aa0",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/rcsb-pdb-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/rcsb-pdb-data-api",
      "facts": [
        {
          "id": "fact.rcsb.pdb-data-api.access",
          "statement": "The RCSB PDB Data API exposes REST and GraphQL access to commonly used metadata, sequences, experimental details, annotations, and computed structure-model records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rcsb.pdb-data-api"
          ]
        },
        {
          "id": "fact.rcsb.pdb-data-api.authentication",
          "statement": "Public reads require no record-depositor identity and do not grant deposition, remediation, annotation, embargo, publication, or experimental authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rcsb.pdb-data-api"
          ]
        },
        {
          "id": "fact.rcsb.pdb-data-api.request",
          "statement": "Clients must select REST core resource and identifier or a bounded GraphQL query, request only needed fields, handle 404 responses, and preserve entry and model provenance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rcsb.pdb-data-api"
          ]
        },
        {
          "id": "fact.rcsb.pdb-data-api.boundary",
          "statement": "Available API attributes are a subset of PDBx/mmCIF metadata and can include external annotations or computed models; they do not prove biological function, experimental reproducibility, or clinical relevance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rcsb.pdb-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.rcsb.pdb-data-api",
          "url": "https://data.rcsb.org/",
          "title": "RCSB PDB Data API",
          "publisher": "RCSB Protein Data Bank",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.reactome-content-service",
      "title": "Reactome Content Service boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Reactome Content Service.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "reactome-content-service",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:601876cc5af7eee8b48e2c19925ce4c4f093f942bcc297dfec74476abd43f734",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/reactome-content-service.json",
      "htmlPath": "/resources/view/public-data-apis/reactome-content-service",
      "facts": [
        {
          "id": "fact.reactome.content-service.access",
          "statement": "Reactome Content Service exposes curated pathways, reactions, physical entities, participants, diseases, species, diagrams, hierarchies, and identifier mappings.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.reactome.content-service"
          ]
        },
        {
          "id": "fact.reactome.content-service.authentication",
          "statement": "Public reads require no user credential and do not grant curator, annotation, release, copyright, clinical, or pathway-editing authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.reactome.content-service"
          ]
        },
        {
          "id": "fact.reactome.content-service.request",
          "statement": "Clients must bind stable identifier, species, resource type, traversal depth, diagram or projection options, fields, format, and paging and preserve release context.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.reactome.content-service"
          ]
        },
        {
          "id": "fact.reactome.content-service.boundary",
          "statement": "Pathways are curated knowledge models assembled from evidence and inference and do not prove activity in a sample, causation, disease mechanism, treatment response, or completeness.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.reactome.content-service"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.reactome.content-service",
          "url": "https://reactome.org/ContentService/",
          "title": "Reactome Content Service API",
          "publisher": "Reactome",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.regulations-gov-api",
      "title": "Regulations.gov API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Regulations.gov API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "regulations-gov-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:8f5cf5cc002a342bd180e843a47be82a09ee88892a28360f7d14976e0b0b24af",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/regulations-gov-api.json",
      "htmlPath": "/resources/view/public-data-apis/regulations-gov-api",
      "facts": [
        {
          "id": "fact.regulations-gov.api.access",
          "statement": "Regulations.gov v4 offers GET operations for documents, comments, and dockets plus separately controlled POST operations for comments and uploads.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.regulations-gov.api"
          ]
        },
        {
          "id": "fact.regulations-gov.api.authentication",
          "statement": "Requests require an api.data.gov key; DEMO_KEY is only for exploration and comment submission requires additional activation and validation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.regulations-gov.api"
          ]
        },
        {
          "id": "fact.regulations-gov.api.request",
          "statement": "Public comment fields vary by agency, some fields are never public, and pagination and last-modified filters are needed for large result sets.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.regulations-gov.api"
          ]
        },
        {
          "id": "fact.regulations-gov.api.boundary",
          "statement": "Read access never authorizes comment submission, and a submitted comment is not public until the responsible agency approves its posting.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.regulations-gov.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.regulations-gov.api",
          "url": "https://open.gsa.gov/api/regulationsgov/",
          "title": "Regulations.gov API",
          "publisher": "U.S. General Services Administration",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.reliefweb-api-v2",
      "title": "ReliefWeb API v2 boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for ReliefWeb API v2.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "reliefweb-api-v2",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:6243b45a74b8188a9475a93478a2f2eb27bb908e74018ef03dbfe401092ee112",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/reliefweb-api-v2.json",
      "htmlPath": "/resources/view/public-data-apis/reliefweb-api-v2",
      "facts": [
        {
          "id": "fact.ocha.reliefweb-api-v2.access",
          "statement": "ReliefWeb API v2 provides read-only JSON access to curated reports, disasters, countries, jobs, training, sources, blog, book, and reference content.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ocha.reliefweb-api-v2"
          ]
        },
        {
          "id": "fact.ocha.reliefweb-api-v2.authentication",
          "statement": "Public reads require a pre-approved appname from November 2025, while publishing is a separate organization-approved API with secret keys and editorial review.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ocha.reliefweb-api-v2"
          ]
        },
        {
          "id": "fact.ocha.reliefweb-api-v2.request",
          "statement": "Clients must bind content type or item ID, appname, query, filters, fields, sorting, offset, and limit and stay within one thousand entries per call and one thousand calls per day.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ocha.reliefweb-api-v2"
          ]
        },
        {
          "id": "fact.ocha.reliefweb-api-v2.boundary",
          "statement": "Content comes from information partners, can carry third-party copyright, and has source-specific quality and update limits; it does not prove real-time humanitarian conditions or operational safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ocha.reliefweb-api-v2"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ocha.reliefweb-api-v2",
          "url": "https://apidoc.reliefweb.int/",
          "title": "ReliefWeb API Documentation",
          "publisher": "United Nations Office for the Coordination of Humanitarian Affairs",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.repology-api",
      "title": "Repology API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Repology API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "repology-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:e30d3f4c786be9d9e4a1e9a7d44407e1d86c18171d925d1b62964f52d0adea6f",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/repology-api.json",
      "htmlPath": "/resources/view/public-data-apis/repology-api",
      "facts": [
        {
          "id": "fact.repology.api.access",
          "statement": "Repology documents cross-repository projects, packages, versions, maintainers, licenses, and repository status.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.repology.api"
          ]
        },
        {
          "id": "fact.repology.api.authentication",
          "statement": "Public reads do not grant upstream, repository, maintainer, package, or Repology editing authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.repology.api"
          ]
        },
        {
          "id": "fact.repology.api.request",
          "statement": "Clients must bind project or package identifier, repository, search term, pagination, fields, and API version.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.repology.api"
          ]
        },
        {
          "id": "fact.repology.api.boundary",
          "statement": "Aggregated package mappings can be incomplete, heuristic, delayed, or disputed and do not prove software safety, identity, freshness, or compatibility.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.repology.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.repology.api",
          "url": "https://repology.org/api",
          "title": "Repology API documentation",
          "publisher": "Repology",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.rfc-editor-index",
      "title": "RFC Editor index and bulk-data boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for RFC Editor index and bulk-data.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "rfc-editor-index",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:c4268efc6f41a3baaccf6382e68e4f164337b37b3e9ba12c822e745ff89048d8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/rfc-editor-index.json",
      "htmlPath": "/resources/view/public-data-apis/rfc-editor-index",
      "facts": [
        {
          "id": "fact.rfc.editor.index.access",
          "statement": "RFC Editor documents RFC index metadata, status, stream, authorship, dates, relationships, and bulk document downloads.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rfc.editor.index"
          ]
        },
        {
          "id": "fact.rfc.editor.index.authentication",
          "statement": "Public reads do not grant RFC authorship, standards status, errata approval, protocol conformance, or RFC Editor authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rfc.editor.index"
          ]
        },
        {
          "id": "fact.rfc.editor.index.request",
          "statement": "Clients must bind RFC number, index representation, status, stream, format, relationship, publication date, and document revision.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rfc.editor.index"
          ]
        },
        {
          "id": "fact.rfc.editor.index.boundary",
          "statement": "An RFC can be informational, experimental, historic, obsolete, or updated; retrieval does not prove implementation conformance, security, or current standard status.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rfc.editor.index"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.rfc.editor.index",
          "url": "https://www.rfc-editor.org/retrieve/bulk/",
          "title": "RFC Editor index and bulk-data documentation",
          "publisher": "RFC Editor",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ripe-stat-data-api",
      "title": "RIPEstat Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for RIPEstat Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ripe-stat-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:9a4332b1755f0e41683516604d3e677031c4453247c4a87f2c1f48d6ab889238",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/ripe-stat-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/ripe-stat-data-api",
      "facts": [
        {
          "id": "fact.ripe.stat.data.api.access",
          "statement": "RIPE NCC documents Internet number-resource, routing, visibility, geolocation, DNS, abuse-contact, and registry-derived datasets.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ripe.stat.data.api"
          ]
        },
        {
          "id": "fact.ripe.stat.data.api.authentication",
          "statement": "Public reads do not grant routing, RPKI, registry, contact, network, or RIPE NCC decision authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ripe.stat.data.api"
          ]
        },
        {
          "id": "fact.ripe.stat.data.api.request",
          "statement": "Clients must bind data call, resource, query time, source, resolution, result field, and request-rate guidance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ripe.stat.data.api"
          ]
        },
        {
          "id": "fact.ripe.stat.data.api.boundary",
          "statement": "RIPEstat combines sources with different latency and meaning and does not prove ownership, physical location, routing authorization, reachability, or abuse.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ripe.stat.data.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ripe.stat.data.api",
          "url": "https://stat.ripe.net/docs/data_api",
          "title": "RIPEstat Data API documentation",
          "publisher": "RIPE NCC",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.rnacentral-api",
      "title": "RNAcentral API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for RNAcentral API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "rnacentral-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:d52e6c8a66beb3e7dfd8343728a3afbd2b1363b421b95f21bfaf0e9c5fb950f9",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/rnacentral-api.json",
      "htmlPath": "/resources/view/public-data-apis/rnacentral-api",
      "facts": [
        {
          "id": "fact.ebi.rnacentral-api.access",
          "statement": "RNAcentral provides public API access to non-coding RNA sequences, stable identifiers, source-database cross-references, genomic coordinates, annotations, and related lookup services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.rnacentral-api"
          ]
        },
        {
          "id": "fact.ebi.rnacentral-api.authentication",
          "statement": "Public reads require no account and do not grant sequence submission, source-database curation, annotation ownership, embargo, or clinical authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.rnacentral-api"
          ]
        },
        {
          "id": "fact.ebi.rnacentral-api.request",
          "statement": "Clients must bind RNAcentral or external identifiers, sequence or genomic filters, taxon scope, feature fields, result format, and pagination and preserve source-database attribution.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.rnacentral-api"
          ]
        },
        {
          "id": "fact.ebi.rnacentral-api.boundary",
          "statement": "Aggregated sequence and annotation records can be merged, superseded, predicted, or inconsistent across releases and do not prove expression, biological function, pathogenicity, or clinical relevance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ebi.rnacentral-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ebi.rnacentral-api",
          "url": "https://rnacentral.org/api",
          "title": "RNAcentral API documentation",
          "publisher": "RNAcentral Consortium at EMBL-EBI",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.ror-rest-api",
      "title": "ROR REST API boundary",
      "summary": "Documented JSON/record status, query-versus-affiliation selection, 10,000-result ceiling and paused client-ID rollout. This review does not test the API or verify affiliation, organizational authority, ownership or reuse terms.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "ror-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T17:13:35.310Z",
      "contentHash": "sha256:34d984d45d1ecdde7e49f40c127a35717113fc3c8a2f434a5e743181a5d76e2e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T17:13:35.310Z"
      },
      "jsonPath": "/resources/public-data-apis/ror-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/ror-rest-api",
      "facts": [
        {
          "id": "fact.ror.rest-api.access",
          "statement": "The v2 organizations endpoint returns JSON including empty fields. Responses default to active records; ?all_status includes inactive and withdrawn records. Null values and empty arrays or objects mean a field has no available value.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ror.rest-api"
          ]
        },
        {
          "id": "fact.ror.rest-api.authentication",
          "statement": "At the recorded review, the client-ID page says new registrations are temporarily paused and rate limits are not differentiated by client-ID presence. A Client-Id identifies an API user; it is not authentication or authorization.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ror.client-id"
          ]
        },
        {
          "id": "fact.ror.rest-api.request",
          "statement": "The documented retrieval ceiling is 10,000 results. For the complete registry, the guide directs users to the data dump instead of paging beyond that ceiling.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ror.rest-api"
          ]
        },
        {
          "id": "fact.ror.rest-api.boundary",
          "statement": "Use the query parameter for organization names or external identifiers, advanced query for fields such as domain or relationship, and affiliation for matching unstructured organization text to ROR IDs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ror.rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ror.rest-api",
          "url": "https://ror.readme.io/docs/rest-api",
          "title": "About the ROR REST API",
          "publisher": "Research Organization Registry",
          "observedAt": "2026-09-06T17:12:42.277Z"
        },
        {
          "id": "source.ror.client-id",
          "url": "https://ror.readme.io/docs/client-id",
          "title": "Register for a client ID",
          "publisher": "Research Organization Registry",
          "observedAt": "2026-09-06T17:13:35.310Z"
        }
      ]
    },
    {
      "id": "resource.public-data.rubygems-api",
      "title": "RubyGems.org API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for RubyGems.org API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "rubygems-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:01f34a8e6fec7faa047eb800f308fe0da4540ded0fab2a8755044bed97f2b9ef",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/rubygems-api.json",
      "htmlPath": "/resources/view/public-data-apis/rubygems-api",
      "facts": [
        {
          "id": "fact.rubygems.api.access",
          "statement": "RubyGems.org documents gem metadata, versions, owners, downloads, search, dependencies, webhooks, and activity.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rubygems.api"
          ]
        },
        {
          "id": "fact.rubygems.api.authentication",
          "statement": "Public reads are separate from API-key-protected owner and publishing operations; credentials must remain secret and access does not grant gem ownership or trust.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rubygems.api"
          ]
        },
        {
          "id": "fact.rubygems.api.request",
          "statement": "Clients must bind gem name, version, search term, page, endpoint, API key, ownership, and rate behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rubygems.api"
          ]
        },
        {
          "id": "fact.rubygems.api.boundary",
          "statement": "Gem metadata and download counts can change or be publisher-controlled and do not prove identity, code safety, maintenance, compatibility, or endorsement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.rubygems.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.rubygems.api",
          "url": "https://guides.rubygems.org/rubygems-org-api/",
          "title": "RubyGems.org API documentation",
          "publisher": "RubyGems.org",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.rxnorm-api",
      "title": "NLM RxNorm API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for NLM RxNorm API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "rxnorm-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:cdf4298e90fc64475662ff875a2026ec506e9c8127c3568eb2bd5f0b9007fcf8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/rxnorm-api.json",
      "htmlPath": "/resources/view/public-data-apis/rxnorm-api",
      "facts": [
        {
          "id": "fact.nlm.rxnorm-api.access",
          "statement": "The RxNorm API retrieves active, current, and historical drug concepts, identifiers, names, properties, relationships, statuses, and related National Drug Codes from the RxNorm data set.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.rxnorm-api"
          ]
        },
        {
          "id": "fact.nlm.rxnorm-api.authentication",
          "statement": "Most RxNorm API use needs no license, while restricted source-vocabulary information can require a UTS API key; public access does not create prescribing, dispensing, endorsement, or clinical authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.rxnorm-api"
          ]
        },
        {
          "id": "fact.nlm.rxnorm-api.request",
          "statement": "Clients must select the exact function, concept scope, identifier or name, search precision, source filters, and JSON or XML representation and account for monthly API and vocabulary updates.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.rxnorm-api"
          ]
        },
        {
          "id": "fact.nlm.rxnorm-api.boundary",
          "statement": "A vocabulary match or related NDC is terminology evidence, not proof of product identity, market status, interchangeability, dosage, patient suitability, or a clinical recommendation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.rxnorm-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nlm.rxnorm-api",
          "url": "https://lhncbc.nlm.nih.gov/RxNav/APIs/RxNormAPIs.html",
          "title": "RxNorm API",
          "publisher": "U.S. National Library of Medicine",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.sam-entity-api",
      "title": "SAM.gov Entity Management API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for SAM.gov Entity Management API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "sam-entity-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:9c8dbc71850561e9c868591a9863b05e86b21702cbfeaffe5c3deca663337464",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/sam-entity-api.json",
      "htmlPath": "/resources/view/public-data-apis/sam-entity-api",
      "facts": [
        {
          "id": "fact.sam.entity.api.access",
          "statement": "U.S. General Services Administration documents SAM.gov entity registration, assertions, points of contact, exclusions, and related public records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sam.entity.api"
          ]
        },
        {
          "id": "fact.sam.entity.api.authentication",
          "statement": "Requests require documented API credentials and access levels; reads do not grant registration, update, award, exclusion, identity, or federal authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sam.entity.api"
          ]
        },
        {
          "id": "fact.sam.entity.api.request",
          "statement": "Clients must bind entity identifier, registration state, purpose, access level, API key, pagination, fields, and update time.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sam.entity.api"
          ]
        },
        {
          "id": "fact.sam.entity.api.boundary",
          "statement": "SAM.gov records require status and access context and do not prove eligibility, ownership, responsibility, award, payment, or endorsement.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sam.entity.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.sam.entity.api",
          "url": "https://open.gsa.gov/api/entity-api/",
          "title": "SAM.gov Entity Management API documentation",
          "publisher": "U.S. General Services Administration",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.sam-gov-opportunities-api",
      "title": "SAM.gov Opportunities API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for SAM.gov Opportunities API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "sam-gov-opportunities-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:3444368ce5f0c9a4d4e5ea521deb29378339b9246a02258a1710d4794ce24655",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/sam-gov-opportunities-api.json",
      "htmlPath": "/resources/view/public-data-apis/sam-gov-opportunities-api",
      "facts": [
        {
          "id": "fact.gsa.sam-opportunities-api.access",
          "statement": "The SAM.gov public opportunities API exposes published federal contract opportunity notices and associated identifiers, dates, agencies, classifications, locations, links, and attachments.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gsa.sam-opportunities-api"
          ]
        },
        {
          "id": "fact.gsa.sam-opportunities-api.authentication",
          "statement": "Requests require a registered API key, which must remain secret; read access does not grant entity registration, bid submission, notice publication, award, or procurement authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gsa.sam-opportunities-api"
          ]
        },
        {
          "id": "fact.gsa.sam-opportunities-api.request",
          "statement": "Clients must bind posted-date ranges and supported notice filters, page through bounded results, preserve notice identifiers, and follow documented attachment and throttling behavior.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gsa.sam-opportunities-api"
          ]
        },
        {
          "id": "fact.gsa.sam-opportunities-api.boundary",
          "statement": "Opportunity notices can be amended, cancelled, archived, delayed, or incomplete and do not prove vendor eligibility, award likelihood, available funding, or a binding solicitation interpretation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.gsa.sam-opportunities-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.gsa.sam-opportunities-api",
          "url": "https://open.gsa.gov/api/get-opportunities-public-api/",
          "title": "SAM.gov Get Opportunities Public API",
          "publisher": "U.S. General Services Administration",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.sec-edgar-data-apis",
      "title": "SEC EDGAR Data APIs boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for SEC EDGAR Data APIs.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "sec-edgar-data-apis",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:23e40db21e0251d53effd2e645be31104307f5d98fdb475c7e87245f4fc080f2",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/sec-edgar-data-apis.json",
      "htmlPath": "/resources/view/public-data-apis/sec-edgar-data-apis",
      "facts": [
        {
          "id": "fact.sec.edgar-data-apis.access",
          "statement": "SEC developer resources expose company-submission and extracted XBRL data as JSON through data.sec.gov and provide separate bulk archives for large retrievals.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sec.edgar-data-apis"
          ]
        },
        {
          "id": "fact.sec.edgar-data-apis.authentication",
          "statement": "Public EDGAR data retrieval does not authorize filer-management or filing-submission operations, which use separate authenticated EDGAR Next APIs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sec.edgar-data-apis"
          ]
        },
        {
          "id": "fact.sec.edgar-data-apis.request",
          "statement": "Automated clients must follow the SEC access policy, identify their user agent, limit request rate, and prefer bulk files over repeated high-volume requests.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sec.edgar-data-apis"
          ]
        },
        {
          "id": "fact.sec.edgar-data-apis.boundary",
          "statement": "A filing or XBRL fact reflects filer-submitted and SEC-published data and does not prove accounting comparability, investment suitability, or an unrevised current value.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.sec.edgar-data-apis"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.sec.edgar-data-apis",
          "url": "https://www.sec.gov/about/developer-resources",
          "title": "SEC Developer Resources",
          "publisher": "U.S. Securities and Exchange Commission",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.semantic-scholar-academic-graph-api",
      "title": "Semantic Scholar Academic Graph API boundary",
      "summary": "Official API overview of service roles, shared anonymous limits and introductory key limits. This documentation-only review does not validate endpoint parameters, paging, scientific claims or reuse rights.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "semantic-scholar-academic-graph-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T18:32:23.689Z",
      "contentHash": "sha256:145eba114f81ecc352d811d26baaee8a38ae06a46393b56447af12593854a5b8",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T18:32:23.689Z"
      },
      "jsonPath": "/resources/public-data-apis/semantic-scholar-academic-graph-api.json",
      "htmlPath": "/resources/view/public-data-apis/semantic-scholar-academic-graph-api",
      "facts": [
        {
          "id": "fact.semantic-scholar.academic-graph-api.access",
          "statement": "The Academic Graph service provides data about authors, papers, citations and venues, including SPECTER2 embeddings.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.semantic-scholar.academic-graph-api"
          ]
        },
        {
          "id": "fact.semantic-scholar.academic-graph-api.authentication",
          "statement": "Most endpoints allow unauthenticated access under a shared 1000-requests-per-second limit across all anonymous users, with possible additional throttling during heavy use. Some endpoints require an API key.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.semantic-scholar.academic-graph-api"
          ]
        },
        {
          "id": "fact.semantic-scholar.academic-graph-api.request",
          "statement": "The documented introductory rate for an API key is 1 RPS on all endpoints. Keys are private; the overview recommends including a key with each request.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.semantic-scholar.academic-graph-api"
          ]
        },
        {
          "id": "fact.semantic-scholar.academic-graph-api.boundary",
          "statement": "Recommendations supplies papers similar to a given paper, while Datasets supplies download links for Academic Graph datasets; these are separate services from Academic Graph.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.semantic-scholar.academic-graph-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.semantic-scholar.academic-graph-api",
          "url": "https://www.semanticscholar.org/product/api",
          "title": "Semantic Scholar API Overview",
          "publisher": "Ai2",
          "observedAt": "2026-09-06T18:32:23.689Z"
        }
      ]
    },
    {
      "id": "resource.public-data.smithsonian-open-access-api",
      "title": "Smithsonian Open Access API boundary",
      "summary": "Official-source access, API-key, documented-metadata, media-availability, and interpretation boundaries for Smithsonian Open Access API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "smithsonian-open-access-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-13T02:07:16Z",
      "contentHash": "sha256:67a9b52b3f7d0369fc64da7cd51d19eac79501001780fef8f13ac2001884c3e9",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-20T02:07:16Z"
      },
      "jsonPath": "/resources/public-data-apis/smithsonian-open-access-api.json",
      "htmlPath": "/resources/view/public-data-apis/smithsonian-open-access-api",
      "facts": [
        {
          "id": "fact.smithsonian.open-access-api.access",
          "statement": "Smithsonian Open Access Developer Tools says Open Access collection metadata is available through a Smithsonian public API hosted at api.data.gov and through weekly-refreshed JSON data in its GitHub repository; this does not establish that every Smithsonian collection object is represented.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.smithsonian.open-access-api"
          ]
        },
        {
          "id": "fact.smithsonian.open-access-api.authentication",
          "statement": "The Developer Tools page says users can register for an API key through the public API. It does not document unauthenticated request access, key scope, a request rate, or a service limit here, so an Agent must not presume anonymous API access or a credential's permissions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.smithsonian.open-access-api"
          ]
        },
        {
          "id": "fact.smithsonian.open-access-api.request",
          "statement": "The reviewed page says API documentation covers fields, departments, and data types, but it does not renew an endpoint, query parameter, paging, cursor, or result-limit contract. A client needs matching official API documentation and any required credential before making a live request.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.smithsonian.open-access-api"
          ]
        },
        {
          "id": "fact.smithsonian.open-access-api.boundary",
          "statement": "For digital images of public-domain objects, the page describes metadata that can include a corresponding image URL. For collection objects with copyright or other limitations, it describes CC0 metadata portions without a Smithsonian media file. This documentation does not establish download or reuse permission for an arbitrary record, media URL, object, or third-party right.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.smithsonian.open-access-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.smithsonian.open-access-api",
          "url": "https://www.si.edu/openaccess/devtools",
          "title": "Smithsonian Open Access Developer Tools",
          "publisher": "Smithsonian Institution",
          "observedAt": "2026-09-13T02:07:16Z"
        }
      ]
    },
    {
      "id": "resource.public-data.south-korea-kosis-api",
      "title": "KOSIS OpenAPI boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for KOSIS OpenAPI.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "south-korea-kosis-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:0bc2a3ac18b2cf8b1c6677f711b0302989d351c630419aa0e541c77c67ec7658",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/south-korea-kosis-api.json",
      "htmlPath": "/resources/view/public-data-apis/south-korea-kosis-api",
      "facts": [
        {
          "id": "fact.south-korea.kosis-api.access",
          "statement": "Statistics Korea documents Korean official statistics tables, indicators, classifications, lists, and chart-oriented responses.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.south-korea.kosis-api"
          ]
        },
        {
          "id": "fact.south-korea.kosis-api.authentication",
          "statement": "Requests use a registered authentication key that must remain secret; access does not grant publication, respondent, correction, or national-statistics authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.south-korea.kosis-api"
          ]
        },
        {
          "id": "fact.south-korea.kosis-api.request",
          "statement": "Clients must bind service, table, item, classification, period, language, format, paging, and authentication key.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.south-korea.kosis-api"
          ]
        },
        {
          "id": "fact.south-korea.kosis-api.boundary",
          "statement": "KOSIS data has language, methodology, revision, suppression, and classification context and does not prove individual conditions or causal relationships.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.south-korea.kosis-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.south-korea.kosis-api",
          "url": "https://kosis.kr/openapi/index/index.jsp",
          "title": "KOSIS OpenAPI documentation",
          "publisher": "Statistics Korea",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.spdx-license-list-data",
      "title": "SPDX License List data boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for SPDX License List data.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "spdx-license-list-data",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:3751b19f8c3254f87082499b310fc06dd73d2254281f87720a68ecc76aa5622c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/spdx-license-list-data.json",
      "htmlPath": "/resources/view/public-data-apis/spdx-license-list-data",
      "facts": [
        {
          "id": "fact.spdx.license-list-data.access",
          "statement": "Linux Foundation SPDX Project documents license and exception identifiers, names, reference text, matching guidance, deprecation state, and machine-readable list data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.spdx.license-list-data"
          ]
        },
        {
          "id": "fact.spdx.license-list-data.authentication",
          "statement": "Public reads do not grant license authorship, legal advice, compliance, exception, relicensing, or SPDX endorsement authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.spdx.license-list-data"
          ]
        },
        {
          "id": "fact.spdx.license-list-data.request",
          "statement": "Clients must bind list version, license or exception ID, deprecated flag, text or template representation, references, and match rules.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.spdx.license-list-data"
          ]
        },
        {
          "id": "fact.spdx.license-list-data.boundary",
          "statement": "An SPDX identifier names standardized license text; it does not prove a package's actual license, compatibility, obligations, ownership, or legal compliance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.spdx.license-list-data"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.spdx.license-list-data",
          "url": "https://spdx.org/licenses/",
          "title": "SPDX License List data documentation",
          "publisher": "Linux Foundation SPDX Project",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-belgium-open-data",
      "title": "Statbel open-data services boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Statbel open-data services.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-belgium-open-data",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:e1b8122774e1c8829876469f8ba442775848c3d9eeb2fb96f90b3dbb119d3821",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-belgium-open-data.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-belgium-open-data",
      "facts": [
        {
          "id": "fact.statbel.open-data.access",
          "statement": "Statbel documents Belgian official statistical datasets, metadata, downloads, services, and geographic products.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statbel.open-data"
          ]
        },
        {
          "id": "fact.statbel.open-data.authentication",
          "statement": "Public access does not grant respondent data, statistical disclosure, dataset modification, publication, or Belgian-government authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statbel.open-data"
          ]
        },
        {
          "id": "fact.statbel.open-data.request",
          "statement": "Clients must bind dataset, reference period, geography, classification, format, version, and published metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statbel.open-data"
          ]
        },
        {
          "id": "fact.statbel.open-data.boundary",
          "statement": "Statistics can be revised, suppressed, sampled, reclassified, or method-dependent and do not prove individual status, legal facts, or causation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statbel.open-data"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.statbel.open-data",
          "url": "https://statbel.fgov.be/en/open-data",
          "title": "Statbel open-data services documentation",
          "publisher": "Statbel",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-canada-web-data-service",
      "title": "Statistics Canada Web Data Service boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Statistics Canada Web Data Service.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-canada-web-data-service",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:6857079b630e2af0688d3e3d03f416e7a0aeb5ad99f8450abd7b1d65af845cf7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-canada-web-data-service.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-canada-web-data-service",
      "facts": [
        {
          "id": "fact.statcan.web-data-service.access",
          "statement": "Statistics Canada Web Data Service exposes documented HTTPS JSON methods for product metadata, vectors, cube data, tables, classifications, and release information.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statcan.web-data-service"
          ]
        },
        {
          "id": "fact.statcan.web-data-service.authentication",
          "statement": "The public service does not require registration, but access does not grant authority over confidential microdata, publication systems, or restricted products.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statcan.web-data-service"
          ]
        },
        {
          "id": "fact.statcan.web-data-service.request",
          "statement": "Clients must respect the documented server and per-IP request limits and use full or delta download files rather than high-volume row-by-row calls when appropriate.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statcan.web-data-service"
          ]
        },
        {
          "id": "fact.statcan.web-data-service.boundary",
          "statement": "Statistical products have vintages, revisions, suppression, sampling, methodology, and unit boundaries and do not prove an individual fact or unchanged current value.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statcan.web-data-service"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.statcan.web-data-service",
          "url": "https://www.statcan.gc.ca/en/developers/wds",
          "title": "Statistics Canada Web Data Service",
          "publisher": "Statistics Canada",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-denmark-statbank-api",
      "title": "Statistics Denmark StatBank API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Statistics Denmark StatBank API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-denmark-statbank-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:13431a251af24fe475ee488d5522575db33474bba88016bcd723c81906b69dd7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-denmark-statbank-api.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-denmark-statbank-api",
      "facts": [
        {
          "id": "fact.dst.statbank-api.access",
          "statement": "The StatBank API exposes all published Statistics Denmark data, tables, subjects, metadata, and data extracts through versioned functions and multiple formats.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dst.statbank-api"
          ]
        },
        {
          "id": "fact.dst.statbank-api.authentication",
          "statement": "Published statistical data is free for commercial and non-commercial use with source attribution under CC BY 4.0, without access to confidential respondent data or table mutation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dst.statbank-api"
          ]
        },
        {
          "id": "fact.dst.statbank-api.request",
          "statement": "Clients should POST UTF-8 JSON to the selected versioned function and bind table, variables, values, language, format, and bounded cell selection; GET parameters require URL encoding.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dst.statbank-api"
          ]
        },
        {
          "id": "fact.dst.statbank-api.boundary",
          "statement": "StatBank shows the most recently updated publication, but statistics can be revised, sampled, suppressed, adjusted, or definition-dependent and do not prove individual circumstances.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.dst.statbank-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.dst.statbank-api",
          "url": "https://www.dst.dk/en/Statistik/hjaelp-til-statistikbanken/api",
          "title": "Statistics Denmark StatBank API",
          "publisher": "Statistics Denmark",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-estonia-pxweb-api",
      "title": "Statistics Estonia PxWeb API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Statistics Estonia PxWeb API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-estonia-pxweb-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:1436b518123a12a75ee3871f62added72e7b535f7f8fe701737eec22ddb7d4ad",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-estonia-pxweb-api.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-estonia-pxweb-api",
      "facts": [
        {
          "id": "fact.statistics-estonia.pxweb-api.access",
          "statement": "Statistics Estonia documents official statistical database folders, tables, variables, values, and multidimensional results.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-estonia.pxweb-api"
          ]
        },
        {
          "id": "fact.statistics-estonia.pxweb-api.authentication",
          "statement": "Public reads do not grant table publication, respondent access, statistical disclosure, revision, or agency authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-estonia.pxweb-api"
          ]
        },
        {
          "id": "fact.statistics-estonia.pxweb-api.request",
          "statement": "Clients must bind language, database path, table, variables, value selections, response format, and cell limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-estonia.pxweb-api"
          ]
        },
        {
          "id": "fact.statistics-estonia.pxweb-api.boundary",
          "statement": "Official tables have methodology, classification, confidentiality, revision, and comparability constraints and do not prove individual facts or causal relationships.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-estonia.pxweb-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.statistics-estonia.pxweb-api",
          "url": "https://andmed.stat.ee/api/v1/en/stat",
          "title": "Statistics Estonia PxWeb API documentation",
          "publisher": "Statistics Estonia",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-finland-pxweb-api",
      "title": "Statistics Finland PxWeb API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Statistics Finland PxWeb API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-finland-pxweb-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:98d750e4d445553ac89467f2e521ed34b0509cd6c2a43dcaf5c0ba727ba6d554",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-finland-pxweb-api.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-finland-pxweb-api",
      "facts": [
        {
          "id": "fact.statfin.pxweb-api.access",
          "statement": "Statistics Finland provides free database tables through PxWeb API interfaces in JSON, JSON-stat, CSV, XML, XLSX, PX, and related machine-readable formats.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statfin.pxweb-api"
          ]
        },
        {
          "id": "fact.statfin.pxweb-api.authentication",
          "statement": "Open statistical data uses CC BY 4.0 with source attribution, while public access does not provide confidential unit data, respondent records, or publication control.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statfin.pxweb-api"
          ]
        },
        {
          "id": "fact.statfin.pxweb-api.request",
          "statement": "Clients must navigate database and table identifiers, inspect metadata, bind dimension selections and output format, and respect the current instance's cell and rate limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statfin.pxweb-api"
          ]
        },
        {
          "id": "fact.statfin.pxweb-api.boundary",
          "statement": "Official statistics can be preliminary, revised, sampled, confidentialised, adjusted, or classification-dependent and do not prove individual facts or cross-series equivalence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statfin.pxweb-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.statfin.pxweb-api",
          "url": "https://stat.fi/en/services/statistical-data-services/open-data-and-interfaces",
          "title": "Statistics Finland Open Data and Interfaces",
          "publisher": "Statistics Finland",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-latvia-pxweb-api",
      "title": "Official Statistics Portal of Latvia PxWeb API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Official Statistics Portal of Latvia PxWeb API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-latvia-pxweb-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:457b32cf6b81e85e181936b47f2c6e78da4b76c74a0e54c7f35bf53321e93994",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-latvia-pxweb-api.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-latvia-pxweb-api",
      "facts": [
        {
          "id": "fact.statistics-latvia.pxweb-api.access",
          "statement": "Central Statistical Bureau of Latvia documents official statistical tables, dimensions, values, metadata, and PxWeb query responses.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-latvia.pxweb-api"
          ]
        },
        {
          "id": "fact.statistics-latvia.pxweb-api.authentication",
          "statement": "Public reads do not grant respondent, publication, correction, confidentiality, or national-statistics authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-latvia.pxweb-api"
          ]
        },
        {
          "id": "fact.statistics-latvia.pxweb-api.request",
          "statement": "Clients must bind language, database, table, dimension selections, response format, paging, and cell limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-latvia.pxweb-api"
          ]
        },
        {
          "id": "fact.statistics-latvia.pxweb-api.boundary",
          "statement": "Published statistics have reference periods, methods, revisions, suppression, and classification breaks and do not prove individual conditions or causation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-latvia.pxweb-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.statistics-latvia.pxweb-api",
          "url": "https://data.stat.gov.lv/pxweb/en/",
          "title": "Official Statistics Portal of Latvia PxWeb API documentation",
          "publisher": "Central Statistical Bureau of Latvia",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-netherlands-statline-odata-api",
      "title": "Statistics Netherlands StatLine OData API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Statistics Netherlands StatLine OData API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-netherlands-statline-odata-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:1645e5656d03d8089a6e808f417eb0c9d6dca75dbf2c25ddb46747b30ed401ab",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-netherlands-statline-odata-api.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-netherlands-statline-odata-api",
      "facts": [
        {
          "id": "fact.cbs.statline-odata-api.access",
          "statement": "Statistics Netherlands publishes all StatLine datasets as machine-readable open data through OData catalog, standard, and feed services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cbs.statline-odata-api"
          ]
        },
        {
          "id": "fact.cbs.statline-odata-api.authentication",
          "statement": "Open-data access does not require a user credential and does not grant confidential microdata, dataset mutation, publication control, official cooperation, or service guarantees.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cbs.statline-odata-api"
          ]
        },
        {
          "id": "fact.cbs.statline-odata-api.request",
          "statement": "Clients must select dataset and OData resource, fields, filters, ordering, and paging; the standard service is limited to ten thousand cells while feeds support larger extraction.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cbs.statline-odata-api"
          ]
        },
        {
          "id": "fact.cbs.statline-odata-api.boundary",
          "statement": "Each dataset has independent refresh, revision, sampling, suppression, methodology, and disclaimer boundaries and does not prove individual facts or uninterrupted availability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.cbs.statline-odata-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.cbs.statline-odata-api",
          "url": "https://www.cbs.nl/en-gb/onze-diensten/open-data/statline-as-open-data",
          "title": "StatLine as Open Data",
          "publisher": "Statistics Netherlands",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-norway-pxweb-api",
      "title": "Statistics Norway PxWeb API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Statistics Norway PxWeb API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-norway-pxweb-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:4bf64cb319368c20f020b43677aabc4daf81dff3d207ead66581c23a7cd0585c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-norway-pxweb-api.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-norway-pxweb-api",
      "facts": [
        {
          "id": "fact.ssb.pxweb-api.access",
          "statement": "Statistics Norway PxWebApi v2 provides GET and POST access to complete or filtered data and richer metadata across all Statbank Norway tables.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ssb.pxweb-api"
          ]
        },
        {
          "id": "fact.ssb.pxweb-api.authentication",
          "statement": "The open APIs require no registration and use CC BY 4.0; public access does not grant confidential microdata, survey-response, table-editing, or publisher authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ssb.pxweb-api"
          ]
        },
        {
          "id": "fact.ssb.pxweb-api.request",
          "statement": "Clients must bind table, language, dimension value codes, filters, output format, stub and heading and remain within eight hundred thousand cells and thirty queries per minute per IP.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ssb.pxweb-api"
          ]
        },
        {
          "id": "fact.ssb.pxweb-api.boundary",
          "statement": "Tables can be unavailable during metadata updates and observations can be revised, suppressed, sampled, adjusted, or definition-dependent; API success does not prove completeness or comparability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ssb.pxweb-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ssb.pxweb-api",
          "url": "https://www.ssb.no/en/api/pxwebapiv2",
          "title": "Statbank Norway PxWebApi v2 User Guide",
          "publisher": "Statistics Norway",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-slovenia-pxweb-api",
      "title": "Statistical Office of Slovenia PxWeb API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Statistical Office of Slovenia PxWeb API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-slovenia-pxweb-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:ec41b821f2af3f86040d0e47db09b9b70f84111498fe9b2dffe946b851ac11ca",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-slovenia-pxweb-api.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-slovenia-pxweb-api",
      "facts": [
        {
          "id": "fact.statistics-slovenia.pxweb-api.access",
          "statement": "Statistical Office of the Republic of Slovenia documents official SiStat database trees, tables, dimensions, values, and PxWeb results.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-slovenia.pxweb-api"
          ]
        },
        {
          "id": "fact.statistics-slovenia.pxweb-api.authentication",
          "statement": "Public reads do not grant respondent, publication, correction, confidentiality, or statistical-authority access.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-slovenia.pxweb-api"
          ]
        },
        {
          "id": "fact.statistics-slovenia.pxweb-api.request",
          "statement": "Clients must bind language, database path, table, variable selections, response format, and cell limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-slovenia.pxweb-api"
          ]
        },
        {
          "id": "fact.statistics-slovenia.pxweb-api.boundary",
          "statement": "SiStat tables have methodology, revision, suppression, territorial, and time-series constraints and do not establish individual facts or causality.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.statistics-slovenia.pxweb-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.statistics-slovenia.pxweb-api",
          "url": "https://pxweb.stat.si/SiStatData/api/v1/en/",
          "title": "Statistical Office of Slovenia PxWeb API documentation",
          "publisher": "Statistical Office of the Republic of Slovenia",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.statistics-sweden-pxweb-api",
      "title": "Statistics Sweden PxWeb API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Statistics Sweden PxWeb API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "statistics-sweden-pxweb-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:cd2223829edcdb42cce8f5da67f9c6004302972003ec4fc3e26e9ea7362de5ff",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/statistics-sweden-pxweb-api.json",
      "htmlPath": "/resources/view/public-data-apis/statistics-sweden-pxweb-api",
      "facts": [
        {
          "id": "fact.scb.pxweb-api.access",
          "statement": "Statistics Sweden PxWebApi 2 exposes complete or filtered Statistical Database tables and metadata through stable RESTful GET interfaces.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.scb.pxweb-api"
          ]
        },
        {
          "id": "fact.scb.pxweb-api.authentication",
          "statement": "Open data is free under CC0, but third-party-agency source references remain applicable and users may not present a service as an official Statistics Sweden partnership.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.scb.pxweb-api"
          ]
        },
        {
          "id": "fact.scb.pxweb-api.request",
          "statement": "Clients must bind table and dimensions, values, time, metadata, format, and filters and respect the documented cell and per-IP call limits for the selected API generation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.scb.pxweb-api"
          ]
        },
        {
          "id": "fact.scb.pxweb-api.boundary",
          "statement": "Statistics are continually corrected and can be sampled, suppressed, adjusted, revised, or sourced from another agency; one response does not prove currentness or individual conditions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.scb.pxweb-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.scb.pxweb-api",
          "url": "https://www.scb.se/api_en?menu=open",
          "title": "Statistics Sweden Statistical Database API",
          "publisher": "Statistics Sweden",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.swiss-pxweb-api",
      "title": "Swiss Federal Statistical Office PxWeb API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Swiss Federal Statistical Office PxWeb API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "swiss-pxweb-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:5fb19da3cc9182b40db6e476b6030111d94b00036c418f0cda4494672d6cd1ba",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/swiss-pxweb-api.json",
      "htmlPath": "/resources/view/public-data-apis/swiss-pxweb-api",
      "facts": [
        {
          "id": "fact.ch.bfs-pxweb-api.access",
          "statement": "The Swiss Federal Statistical Office PxWeb API exposes public statistical database hierarchies, table metadata, and selected multidimensional observations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ch.bfs-pxweb-api"
          ]
        },
        {
          "id": "fact.ch.bfs-pxweb-api.authentication",
          "statement": "Documented public reads require no user credential and do not grant confidential microdata, respondent information, table editing, or official-publication authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ch.bfs-pxweb-api"
          ]
        },
        {
          "id": "fact.ch.bfs-pxweb-api.request",
          "statement": "Clients must navigate language, database, subject, and table identifiers, inspect dimensions, bind allowed value selections and output format, and respect instance cell and request limits.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ch.bfs-pxweb-api"
          ]
        },
        {
          "id": "fact.ch.bfs-pxweb-api.boundary",
          "statement": "Statistics can be revised, sampled, rounded, suppressed, classified, or territorially scoped and do not prove individual circumstances, causal conclusions, or cross-table comparability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ch.bfs-pxweb-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ch.bfs-pxweb-api",
          "url": "https://www.pxweb.bfs.admin.ch/api/v1/en/",
          "title": "Swiss PxWeb API",
          "publisher": "Swiss Federal Statistical Office",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.tfl-unified-api",
      "title": "Transport for London Unified API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Transport for London Unified API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "tfl-unified-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:0064f9312795297ac8ecd486c181f9e0580af7812a45d1553170a0548787c066",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/tfl-unified-api.json",
      "htmlPath": "/resources/view/public-data-apis/tfl-unified-api",
      "facts": [
        {
          "id": "fact.tfl.unified.api.access",
          "statement": "Transport for London documents transport lines, stops, arrivals, journeys, status, disruptions, roads, occupancy, and related London data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.tfl.unified.api"
          ]
        },
        {
          "id": "fact.tfl.unified.api.authentication",
          "statement": "Some use requires documented registration or credentials; reads do not grant service operation, dispatch, ticketing, control, or Transport for London authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.tfl.unified.api"
          ]
        },
        {
          "id": "fact.tfl.unified.api.request",
          "statement": "Clients must bind mode, line, stop, route, coordinates, time, direction, endpoint, application credentials, and pagination.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.tfl.unified.api"
          ]
        },
        {
          "id": "fact.tfl.unified.api.boundary",
          "statement": "Transport data can be delayed, predicted, incomplete, disrupted, or revised and does not guarantee arrival, accessibility, routing, capacity, or travel safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.tfl.unified.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.tfl.unified.api",
          "url": "https://api.tfl.gov.uk/",
          "title": "Transport for London Unified API documentation",
          "publisher": "Transport for London",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.treasury-fiscal-data-api",
      "title": "U.S. Treasury Fiscal Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for U.S. Treasury Fiscal Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "treasury-fiscal-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:f6f69725fc66a314fb933ac245b38171af35ce2ab562e283bb8860aed343f4a5",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/treasury-fiscal-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/treasury-fiscal-data-api",
      "facts": [
        {
          "id": "fact.treasury.fiscal-data-api.access",
          "statement": "The Fiscal Data API exposes published U.S. Treasury fiscal datasets through versioned HTTPS endpoints and documents each dataset's fields and data types.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.treasury.fiscal-data-api"
          ]
        },
        {
          "id": "fact.treasury.fiscal-data-api.authentication",
          "statement": "Public read access does not require an API key, account, or authenticated Treasury session and grants no authority to modify fiscal records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.treasury.fiscal-data-api"
          ]
        },
        {
          "id": "fact.treasury.fiscal-data-api.request",
          "statement": "Clients must bind endpoint, fields, filters, sorting, output format, page number, and page size and follow pagination metadata rather than treat one response as complete.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.treasury.fiscal-data-api"
          ]
        },
        {
          "id": "fact.treasury.fiscal-data-api.boundary",
          "statement": "Fiscal observations can be revised, rounded, classified, or released on different schedules and do not by themselves prove a payment, obligation, forecast, or financial recommendation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.treasury.fiscal-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.treasury.fiscal-data-api",
          "url": "https://fiscaldata.treasury.gov/api-documentation/",
          "title": "Fiscal Data API Documentation",
          "publisher": "U.S. Department of the Treasury",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.trove-api",
      "title": "Trove API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Trove API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "trove-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:42a9a6e85a4ef46af99cf55082a3791c5d6142f9c7773acf96b6769de4a3417e",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/trove-api.json",
      "htmlPath": "/resources/view/public-data-apis/trove-api",
      "facts": [
        {
          "id": "fact.trove.api.access",
          "statement": "National Library of Australia documents Australian newspapers, journals, books, images, maps, people, organizations, lists, and collection records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.trove.api"
          ]
        },
        {
          "id": "fact.trove.api.authentication",
          "statement": "Requests require a documented API key; reads do not grant record editing, contributor identity, copyright, collection, or National Library authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.trove.api"
          ]
        },
        {
          "id": "fact.trove.api.request",
          "statement": "Clients must bind zone or category, query, record identifier, facet, sort, page, encoding, API key, and rights metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.trove.api"
          ]
        },
        {
          "id": "fact.trove.api.boundary",
          "statement": "Aggregated and OCR-derived records can be incomplete, duplicated, revised, or rights-limited and do not prove authenticity, transcription accuracy, ownership, or reuse permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.trove.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.trove.api",
          "url": "https://trove.nla.gov.au/about/create-something/using-api",
          "title": "Trove API documentation",
          "publisher": "National Library of Australia",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.uk-carbon-intensity-api",
      "title": "Great Britain Carbon Intensity API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Great Britain Carbon Intensity API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "uk-carbon-intensity-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:5ba698370d540d259b9349ae3794967d7d983914e6a3d2d44c5d79cee23577df",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/uk-carbon-intensity-api.json",
      "htmlPath": "/resources/view/public-data-apis/uk-carbon-intensity-api",
      "facts": [
        {
          "id": "fact.uk.carbon-intensity-api.access",
          "statement": "National Energy System Operator documents regional and national electricity carbon-intensity forecasts, actuals, factors, and generation mix.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.carbon-intensity-api"
          ]
        },
        {
          "id": "fact.uk.carbon-intensity-api.authentication",
          "statement": "Documented reads are public and do not grant grid operation, dispatch, settlement, forecast publication, or energy-policy authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.carbon-intensity-api"
          ]
        },
        {
          "id": "fact.uk.carbon-intensity-api.request",
          "statement": "Clients must bind time range, region or postcode, forecast horizon, generation mix, response version, and update interval.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.carbon-intensity-api"
          ]
        },
        {
          "id": "fact.uk.carbon-intensity-api.boundary",
          "statement": "Intensity values are modeled or estimated and can be revised; they do not prove a device's electricity source, emissions account, bill, or operational safety.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.carbon-intensity-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.uk.carbon-intensity-api",
          "url": "https://carbon-intensity.github.io/api-definitions/",
          "title": "Great Britain Carbon Intensity API documentation",
          "publisher": "National Energy System Operator",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.uk-dbt-data-api",
      "title": "UK Department for Business and Trade Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for UK Department for Business and Trade Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "uk-dbt-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:82375cf19cde349346695f13f5b3c538ad30838ee95d1af0c3716833387d6b2b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/uk-dbt-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/uk-dbt-data-api",
      "facts": [
        {
          "id": "fact.uk.dbt-data-api.access",
          "statement": "The Data API supplies versioned datasets, tables, reports, metadata, and filtered or aggregated data in JSON, CSV, SQLite, Parquet, ODS, and CSVW-related forms.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.dbt-data-api"
          ]
        },
        {
          "id": "fact.uk.dbt-data-api.authentication",
          "statement": "Documented HTTPS reads require no authentication and do not grant dataset publication, department representation, source-system mutation, or access to non-public government data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.dbt-data-api"
          ]
        },
        {
          "id": "fact.uk.dbt-data-api.request",
          "statement": "Clients must bind immutable or compatible semantic dataset versions, table or report, fields, filters, aggregations, format, and pagination and handle documented redirects to current versions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.dbt-data-api"
          ]
        },
        {
          "id": "fact.uk.dbt-data-api.boundary",
          "statement": "Dataset versions and reports have independent scope, quality, revision, and interpretation limits and do not prove current trade conditions, official advice, policy effect, or commercial outcomes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.dbt-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.uk.dbt-data-api",
          "url": "https://data.api.trade.gov.uk/",
          "title": "Department for Business and Trade Data API",
          "publisher": "UK Department for Business and Trade",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.uk-government-api-catalogue",
      "title": "UK Government API Catalogue boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for UK Government API Catalogue.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "uk-government-api-catalogue",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:b6aa1bcc4597cf02401b94effbc595d54d0ae07efae4d99160fc9744c847cb9c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/uk-government-api-catalogue.json",
      "htmlPath": "/resources/view/public-data-apis/uk-government-api-catalogue",
      "facts": [
        {
          "id": "fact.uk.api-catalogue.access",
          "statement": "The UK public-sector API Catalogue provides machine-oriented discovery metadata for APIs published by government departments and public bodies.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.api-catalogue"
          ]
        },
        {
          "id": "fact.uk.api-catalogue.authentication",
          "statement": "Catalogue access is public, while every listed API retains its own authentication, licensing, availability, and authorization rules; listing does not grant access to restricted services.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.api-catalogue"
          ]
        },
        {
          "id": "fact.uk.api-catalogue.request",
          "statement": "Clients must follow each catalogue record to its authoritative documentation and bind the listed publisher, environment, base URL, version, and access constraints before use.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.api-catalogue"
          ]
        },
        {
          "id": "fact.uk.api-catalogue.boundary",
          "statement": "Catalogue presence documents discovery, not public accessibility, operational health, endorsement, completeness, legal authority, or successful downstream integration.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.api-catalogue"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.uk.api-catalogue",
          "url": "https://www.api.gov.uk/",
          "title": "UK public sector API Catalogue",
          "publisher": "UK Government Digital Service",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.uk-legislation-data-api",
      "title": "UK Legislation Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for UK Legislation Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "uk-legislation-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:cc08c768a3d4873ecd7471437e2aa813a566a53e5c6e27301cc754e180f5e0d7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/uk-legislation-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/uk-legislation-data-api",
      "facts": [
        {
          "id": "fact.uk.legislation-data-api.access",
          "statement": "legislation.gov.uk provides stable legislation URIs and content negotiation for enacted texts, metadata, changes, effects, extent, versions, tables of contents, and machine-readable XML, HTML, RDF, and Atom representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.legislation-data-api"
          ]
        },
        {
          "id": "fact.uk.legislation-data-api.authentication",
          "statement": "Public retrieval under applicable Crown and Parliamentary copyright terms does not grant legislative amendment, official-publisher, authentication, commencement, or legal-advice authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.legislation-data-api"
          ]
        },
        {
          "id": "fact.uk.legislation-data-api.request",
          "statement": "Clients must bind legislation type, year, number, section, version or date, extent, language, and representation and follow canonical identifiers and linked version metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.legislation-data-api"
          ]
        },
        {
          "id": "fact.uk.legislation-data-api.boundary",
          "statement": "Online text can contain outstanding effects, annotations, prospective provisions, geographic limits, and update lag and does not by itself prove that a provision is in force or applicable to a case.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.legislation-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.uk.legislation-data-api",
          "url": "https://www.legislation.gov.uk/developer",
          "title": "legislation.gov.uk Developer Resources",
          "publisher": "The National Archives",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.uk-ons-api",
      "title": "UK Office for National Statistics API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for UK Office for National Statistics API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "uk-ons-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:f99db6d3d68add88bf9624bc1dc6b3ba962ac786ff099bca3181728cef7234ad",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/uk-ons-api.json",
      "htmlPath": "/resources/view/public-data-apis/uk-ons-api",
      "facts": [
        {
          "id": "fact.ons.beta-api.access",
          "statement": "The ONS API exposes datasets, editions, versions, observations, and filtered downloads through HTTP endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ons.beta-api"
          ]
        },
        {
          "id": "fact.ons.beta-api.authentication",
          "statement": "The documented beta API is open without API keys but may introduce breaking changes while functionality is developed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ons.beta-api"
          ]
        },
        {
          "id": "fact.ons.beta-api.request",
          "statement": "Single observations and filtered dataset exports use different request workflows, including POST-based filter construction for complex slices.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ons.beta-api"
          ]
        },
        {
          "id": "fact.ons.beta-api.boundary",
          "statement": "A latest dataset version can be revised or corrected, so clients must retain edition and version identity instead of treating titles as immutable series.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.ons.beta-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.ons.beta-api",
          "url": "https://developer.ons.gov.uk/",
          "title": "ONS Developer Hub",
          "publisher": "UK Office for National Statistics",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.uk-parliament-data-apis",
      "title": "UK Parliament Data APIs boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for UK Parliament Data APIs.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "uk-parliament-data-apis",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:d6cc19b77e602e00b81b21a02a5e08fae4e5ba91247bc601ba3af6b5568aa33a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/uk-parliament-data-apis.json",
      "htmlPath": "/resources/view/public-data-apis/uk-parliament-data-apis",
      "facts": [
        {
          "id": "fact.uk.parliament-data-apis.access",
          "statement": "The UK Parliament developer hub publishes supported APIs for members, interests, votes, questions, statutory instruments, treaties, bills, committees, publications, and current parliamentary activity.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.parliament-data-apis"
          ]
        },
        {
          "id": "fact.uk.parliament-data-apis.authentication",
          "statement": "Public data access does not grant parliamentary account, member, clerk, vote, question, bill, committee, publishing, or procedural authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.parliament-data-apis"
          ]
        },
        {
          "id": "fact.uk.parliament-data-apis.request",
          "statement": "Clients must select the supported API and version and bind its identifier, house, status, date, search, page, skip, take, and related-resource parameters while tolerating compatible additive fields.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.parliament-data-apis"
          ]
        },
        {
          "id": "fact.uk.parliament-data-apis.boundary",
          "statement": "Parliamentary records can be corrected, updated, withdrawn, procedurally qualified, or superseded and do not replace the official record, current business papers, enacted law, or legal advice.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.parliament-data-apis"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.uk.parliament-data-apis",
          "url": "https://developer.parliament.uk/home",
          "title": "UK Parliament Developer Hub",
          "publisher": "UK Parliament",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.uk-police-data-api",
      "title": "UK Police Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for UK Police Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "uk-police-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:7ee29d3077a4a0d74258c072cf634d5b8abd0e48aa7d11f6afb3e99663cba02b",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/uk-police-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/uk-police-data-api",
      "facts": [
        {
          "id": "fact.uk.police-data-api.access",
          "statement": "The Police API provides JSON access to police forces, neighbourhoods, street-level crime, outcomes, stop-and-search data, events, stations, categories, and data availability for England, Wales, and Northern Ireland.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.police-data-api"
          ]
        },
        {
          "id": "fact.uk.police-data-api.authentication",
          "statement": "The API no longer requires authentication and public access does not grant case-system, exact-location, person-identification, police-operation, reporting, or enforcement authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.police-data-api"
          ]
        },
        {
          "id": "fact.uk.police-data-api.request",
          "statement": "Clients must bind force, neighbourhood, location or polygon, category, and month, use POST for long polygons, respect fifteen requests per second with burst thirty, and handle 429 and size-limit failures.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.police-data-api"
          ]
        },
        {
          "id": "fact.uk.police-data-api.boundary",
          "statement": "Crime and stop data is monthly, force-supplied, quality-checked, anonymised, and geographically approximate and is not official performance statistics or proof of an incident, person, guilt, risk, or current police activity.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uk.police-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.uk.police-data-api",
          "url": "https://data.police.uk/docs/",
          "title": "Police API Documentation",
          "publisher": "Single Online Home National Digital Team",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.umls-api",
      "title": "UMLS API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for UMLS API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "umls-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:21d0841d00f51925538f439368be678544c9833a191a1b9d682d198af46bacc5",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/umls-api.json",
      "htmlPath": "/resources/view/public-data-apis/umls-api",
      "facts": [
        {
          "id": "fact.nlm.umls-api.access",
          "statement": "The UMLS REST API exposes concepts, atoms, source vocabularies, definitions, relations, semantic types, crosswalks, and search over licensed terminology content.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.umls-api"
          ]
        },
        {
          "id": "fact.nlm.umls-api.authentication",
          "statement": "Requests require a UTS account and API key and remain subject to source-vocabulary licenses; credentials and restricted content must not be embedded in public resource records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.umls-api"
          ]
        },
        {
          "id": "fact.nlm.umls-api.request",
          "statement": "Clients must bind release, source vocabulary, identifier, search type, language, page number, page size, and relation scope and respect license and rate requirements.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.umls-api"
          ]
        },
        {
          "id": "fact.nlm.umls-api.boundary",
          "statement": "UMLS aggregation and mappings can contain ambiguity, source disagreement, historical terms, and licensing limits and do not prove clinical equivalence, diagnosis, code validity, or treatment suitability.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.nlm.umls-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.nlm.umls-api",
          "url": "https://documentation.uts.nlm.nih.gov/rest/home.html",
          "title": "UMLS REST API documentation",
          "publisher": "U.S. National Library of Medicine",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.un-comtrade-api",
      "title": "UN Comtrade API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for UN Comtrade API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "un-comtrade-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:86ec48f2a3f04395aa89980498c11d1fe35d3431a031efa7a014b9879e5c5315",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/un-comtrade-api.json",
      "htmlPath": "/resources/view/public-data-apis/un-comtrade-api",
      "facts": [
        {
          "id": "fact.un.comtrade-api.access",
          "statement": "UN Comtrade provides API developer access to detailed annual and monthly trade statistics by product, reporter, partner, flow, period, and classification.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.comtrade-api"
          ]
        },
        {
          "id": "fact.un.comtrade-api.authentication",
          "statement": "Free registered access has documented call and record ceilings, while subscription tiers provide additional functionality; an API key is a private credential.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.comtrade-api"
          ]
        },
        {
          "id": "fact.un.comtrade-api.request",
          "statement": "Clients must bind frequency, classification, commodity, reporter, partner, period, trade flow, breakdown, paging, and aggregation instead of treating totals as raw records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.comtrade-api"
          ]
        },
        {
          "id": "fact.un.comtrade-api.boundary",
          "statement": "Trade data is country-reported and can be estimated, converted, revised, delayed, or asymmetric between partners and does not prove current shipments or economic causation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.comtrade-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.un.comtrade-api",
          "url": "https://comtrade.un.org/",
          "title": "UN Comtrade Database",
          "publisher": "United Nations Statistics Division",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.un-population-data-api",
      "title": "UN Population Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for UN Population Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "un-population-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:6808d96ca082e6eecc70a011f6256ee083e3d0ae03a58fccfee68d8df117f047",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/un-population-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/un-population-data-api",
      "facts": [
        {
          "id": "fact.un.population-data-api.access",
          "statement": "United Nations Population Division documents World Population Prospects indicators, locations, age groups, periods, estimates, and projections.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.population-data-api"
          ]
        },
        {
          "id": "fact.un.population-data-api.authentication",
          "statement": "Documented data access does not grant dataset editing, UN representation, official forecast, demographic, or policy authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.population-data-api"
          ]
        },
        {
          "id": "fact.un.population-data-api.request",
          "statement": "Clients must bind indicator, location, age, sex, variant, start and end year, paging, and response fields.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.population-data-api"
          ]
        },
        {
          "id": "fact.un.population-data-api.boundary",
          "statement": "Population estimates and projections depend on revisions, scenarios, demographic methods, and uncertainty and do not prove future outcomes or individual conditions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.population-data-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.un.population-data-api",
          "url": "https://population.un.org/dataportal/about/dataapi",
          "title": "UN Population Data API documentation",
          "publisher": "United Nations Population Division",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.un-sdg-api",
      "title": "United Nations SDG API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for United Nations SDG API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "un-sdg-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:6fa18be44e34d0d15ffa7997d6043dabcd37f86a3783227fff9954f9b164fe41",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/un-sdg-api.json",
      "htmlPath": "/resources/view/public-data-apis/un-sdg-api",
      "facts": [
        {
          "id": "fact.un.sdg-api.access",
          "statement": "The UN SDG API exposes goals, targets, indicators, series, geographic areas, time periods, releases, and reported SDG observations through documented endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.sdg-api"
          ]
        },
        {
          "id": "fact.un.sdg-api.authentication",
          "statement": "Public documentation access does not grant authority to submit national data, change custodian records, access confidential microdata, or act for a UN agency.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.sdg-api"
          ]
        },
        {
          "id": "fact.un.sdg-api.request",
          "statement": "Clients must bind series, geography, time, dimensions, release, page, and page size and retain observation status, units, nature, source, and footnotes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.sdg-api"
          ]
        },
        {
          "id": "fact.un.sdg-api.boundary",
          "statement": "SDG observations are reported through custodian and national statistical processes and can have gaps, estimates, revisions, and methodological differences that limit comparison.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.un.sdg-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.un.sdg-api",
          "url": "https://unstats.un.org/SDGAPI/swagger/",
          "title": "United Nations SDG API",
          "publisher": "United Nations Statistics Division",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.unhcr-refugee-statistics-api",
      "title": "UNHCR Refugee Statistics API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for UNHCR Refugee Statistics API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "unhcr-refugee-statistics-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:af24e16a1634cb351e38620d07ae3a3cebbec149e4888d58615e8e7166c2982d",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/unhcr-refugee-statistics-api.json",
      "htmlPath": "/resources/view/public-data-apis/unhcr-refugee-statistics-api",
      "facts": [
        {
          "id": "fact.unhcr.refugee-statistics-api.access",
          "statement": "The UNHCR Refugee Statistics API exposes public population, asylum, demographic, solutions, years, regions, countries, and related reference data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.unhcr.refugee-statistics-api"
          ]
        },
        {
          "id": "fact.unhcr.refugee-statistics-api.authentication",
          "statement": "Public statistical reads do not provide access to protection case files, personally identifiable people, beneficiary systems, or operational authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.unhcr.refugee-statistics-api"
          ]
        },
        {
          "id": "fact.unhcr.refugee-statistics-api.request",
          "statement": "Clients must bind population type, year, country of asylum or origin, region, limit, and page and inspect totals and metadata rather than infer complete coverage from one page.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.unhcr.refugee-statistics-api"
          ]
        },
        {
          "id": "fact.unhcr.refugee-statistics-api.boundary",
          "statement": "Displacement statistics can be estimated, rounded, revised, definition-dependent, or unavailable and do not identify individuals or determine legal protection status.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.unhcr.refugee-statistics-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.unhcr.refugee-statistics-api",
          "url": "https://api.unhcr.org/docs/refugee-statistics.html",
          "title": "UNHCR Refugee Statistics API",
          "publisher": "United Nations High Commissioner for Refugees",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.unicef-sdmx-api",
      "title": "UNICEF SDMX API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for UNICEF SDMX API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "unicef-sdmx-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:c0579d4efa8ab6057bde1689a00ecb7583d54897f224f0188a10af42121ade78",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/unicef-sdmx-api.json",
      "htmlPath": "/resources/view/public-data-apis/unicef-sdmx-api",
      "facts": [
        {
          "id": "fact.unicef.sdmx.api.access",
          "statement": "UNICEF documents UNICEF dataflows, structures, code lists, dimensions, observations, and SDMX metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.unicef.sdmx.api"
          ]
        },
        {
          "id": "fact.unicef.sdmx.api.authentication",
          "statement": "Public reads do not grant statistical publication, country reporting, child identity, policy, program, or UNICEF authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.unicef.sdmx.api"
          ]
        },
        {
          "id": "fact.unicef.sdmx.api.request",
          "statement": "Clients must bind SDMX resource, agency, flow, version, key, dimensions, time range, detail, references, and representation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.unicef.sdmx.api"
          ]
        },
        {
          "id": "fact.unicef.sdmx.api.boundary",
          "statement": "Indicators can be modeled, revised, suppressed, estimated, or methodology-dependent and do not prove individual conditions, causation, eligibility, or policy outcome.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.unicef.sdmx.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.unicef.sdmx.api",
          "url": "https://sdmx.data.unicef.org/ws/public/sdmxapi/rest/dataflow/all/all/latest",
          "title": "UNICEF SDMX API documentation",
          "publisher": "UNICEF",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.uniprot-rest-api",
      "title": "UniProt REST API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for UniProt REST API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "uniprot-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:3c4b69a48850719954914339c3546e1c4936dc6517b8b2d3353ae1a19ecf15ac",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/uniprot-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/uniprot-rest-api",
      "facts": [
        {
          "id": "fact.uniprot.rest-api.access",
          "statement": "UniProt provides free RESTful programmatic access to UniProtKB, UniRef, UniParc, proteomes, taxonomy, identifier mapping, sequence, feature, and related protein knowledge resources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uniprot.rest-api"
          ]
        },
        {
          "id": "fact.uniprot.rest-api.authentication",
          "statement": "Public retrieval does not grant curation, submission, account, embargoed-data, or referenced third-party content rights beyond the applicable source licenses.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uniprot.rest-api"
          ]
        },
        {
          "id": "fact.uniprot.rest-api.request",
          "statement": "Clients must bind dataset, identifier or search query, fields, format, pagination or streaming controls and handle status, obsolete, redirected, and release-dependent identifiers.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uniprot.rest-api"
          ]
        },
        {
          "id": "fact.uniprot.rest-api.boundary",
          "statement": "UniProt entries combine reviewed and unreviewed annotations, imported sources, predictions, and release-specific clusters; they do not prove function, expression, causality, or clinical interpretation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uniprot.rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.uniprot.rest-api",
          "url": "https://www.uniprot.org/help/api",
          "title": "UniProt Programmatic Access",
          "publisher": "UniProt Consortium",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.us-census-data-api",
      "title": "U.S. Census Data API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for U.S. Census Data API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "us-census-data-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-27T02:06:00.127Z",
      "contentHash": "sha256:4dafb75def6da3943107e968dce0bc645ac5eec63ec02b3a13b7ff02c38af62a",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-10-04T02:06:00.127Z"
      },
      "jsonPath": "/resources/public-data-apis/us-census-data-api.json",
      "htmlPath": "/resources/view/public-data-apis/us-census-data-api",
      "facts": [
        {
          "id": "fact.census.data-api.access",
          "statement": "Census developer guidance distinguishes the Data API, Microdata API and machine-readable discovery service. The Data API overview associates statistical data with a reference year and geographic area; it does not establish complete or current coverage for every dataset.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.data-api",
            "source.census.data-api.overview"
          ]
        },
        {
          "id": "fact.census.data-api.authentication",
          "statement": "The Census Bureau announcement dated May 11, 2026 requires an API key for all data queries. Older keyless-query allowances must not be treated as current access permission. No key was created or tested in this review; keep credentials out of public examples and logs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.data-api.key-notice"
          ]
        },
        {
          "id": "fact.census.data-api.request",
          "statement": "The current guide constructs queries from dataset, year or time-series path, get variables, applicable predicates, geography and API key. It describes a two-dimensional JSON array with a header row. CSV export is a subsequent conversion, not evidence of a native CSV API response. Variables and geographic availability depend on dataset and year.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.data-api.examples"
          ]
        },
        {
          "id": "fact.census.data-api.boundary",
          "statement": "Examples describe statistical estimates, including ACS margins of error. An API response is not proof of complete coverage, cross-year comparability, individual-level disclosure clearance or government endorsement; it is not permission to process sensitive data or assume redistribution rights. Live datasets and license terms were not tested or reassessed.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.census.data-api.overview",
            "source.census.data-api.examples"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.census.data-api",
          "url": "https://www.census.gov/data/developers/guidance.html",
          "title": "Guidance for Developers",
          "publisher": "U.S. Census Bureau",
          "observedAt": "2026-09-27T02:03:58.655Z"
        },
        {
          "id": "source.census.data-api.overview",
          "url": "https://www.census.gov/data/developers/guidance/api-user-guide.html",
          "title": "Census Data API User Guide overview",
          "publisher": "U.S. Census Bureau",
          "observedAt": "2026-09-27T02:04:43.285Z"
        },
        {
          "id": "source.census.data-api.key-notice",
          "url": "https://www.census.gov/library/video/2026/adrm/requesting-a-census-data-api-key.html",
          "title": "Requesting a Census Data API Key: May 11 2026 announcement",
          "publisher": "U.S. Census Bureau",
          "observedAt": "2026-09-27T02:05:59.493Z"
        },
        {
          "id": "source.census.data-api.examples",
          "url": "https://www.census.gov/data/developers/guidance/api-user-guide.Example_API_Queries.html",
          "title": "Census Data API User Guide: Example API Queries",
          "publisher": "U.S. Census Bureau",
          "observedAt": "2026-09-27T02:06:00.127Z"
        }
      ]
    },
    {
      "id": "resource.public-data.usajobs-api",
      "title": "USAJOBS API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for USAJOBS API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "usajobs-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:750ea1c4ecce6dad61931143ea3b7bd8a699d0b64eb1706ae2fee0d7a36366fe",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/usajobs-api.json",
      "htmlPath": "/resources/view/public-data-apis/usajobs-api",
      "facts": [
        {
          "id": "fact.opm.usajobs-api.access",
          "statement": "The USAJOBS API exposes federal job-search results, announcement details, and supporting code lists through documented read endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opm.usajobs-api"
          ]
        },
        {
          "id": "fact.opm.usajobs-api.authentication",
          "statement": "Requests require an API key and registered email headers, which are credentials and must not be published; access does not grant application, hiring, eligibility, or agency authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opm.usajobs-api"
          ]
        },
        {
          "id": "fact.opm.usajobs-api.request",
          "statement": "Clients must bind keywords, locations, organization or series filters, announcement identifiers, result fields, and paging and retain the canonical application and announcement links.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opm.usajobs-api"
          ]
        },
        {
          "id": "fact.opm.usajobs-api.boundary",
          "statement": "Announcements can change, close early, be cancelled, or contain agency-specific qualification rules and do not prove eligibility, referral, interview, selection, or employment status.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.opm.usajobs-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.opm.usajobs-api",
          "url": "https://developer.usajobs.gov/api-reference/",
          "title": "USAJOBS API Reference",
          "publisher": "U.S. Office of Personnel Management",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.usaspending-api",
      "title": "USAspending API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for USAspending API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "usaspending-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:3d4676b422289342aefd6e29a6e50aa6ababa3d3b51096a1099928ff87455f95",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/usaspending-api.json",
      "htmlPath": "/resources/view/public-data-apis/usaspending-api",
      "facts": [
        {
          "id": "fact.usaspending.api.access",
          "statement": "The official USAspending API repository documents public REST endpoints for awards, accounts, agencies, recipients, spending searches, and downloadable federal spending data.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usaspending.api"
          ]
        },
        {
          "id": "fact.usaspending.api.authentication",
          "statement": "Documented public reads do not grant access to agency submission systems, recipient accounts, payment systems, or non-public award information.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usaspending.api"
          ]
        },
        {
          "id": "fact.usaspending.api.request",
          "statement": "Search clients must use the endpoint-specific filters, time periods, award types, grouping, page, and limit contract and must not infer a complete result from one page.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usaspending.api"
          ]
        },
        {
          "id": "fact.usaspending.api.boundary",
          "statement": "USAspending records originate from multiple federal reporting systems and can be corrected or delayed; they do not independently prove payment, performance, fraud, or legal compliance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usaspending.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.usaspending.api",
          "url": "https://github.com/fedspendingtransparency/usaspending-api",
          "title": "USAspending API",
          "publisher": "U.S. Department of the Treasury",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.usda-fooddata-central-api",
      "title": "USDA FoodData Central API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for USDA FoodData Central API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "usda-fooddata-central-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:c8d5f9e846bade5bee4e7673c20cbd12bbff2f624fe5813527861988eacab274",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/usda-fooddata-central-api.json",
      "htmlPath": "/resources/view/public-data-apis/usda-fooddata-central-api",
      "facts": [
        {
          "id": "fact.usda.fooddata-central-api.access",
          "statement": "FoodData Central provides REST endpoints for food search, food details, multiple foods, and paged food listings across documented data types.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usda.fooddata-central-api"
          ]
        },
        {
          "id": "fact.usda.fooddata-central-api.authentication",
          "statement": "Every request requires a data.gov API key; DEMO_KEY is limited to initial exploration, and assigned keys must not be exposed in public code or records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usda.fooddata-central-api"
          ]
        },
        {
          "id": "fact.usda.fooddata-central-api.request",
          "statement": "Clients must bind food identifiers, query terms, data types, fields, page size, and sort behavior and use the data-type documentation to interpret nutrients.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usda.fooddata-central-api"
          ]
        },
        {
          "id": "fact.usda.fooddata-central-api.boundary",
          "statement": "Food and nutrient data can vary by source, formulation, serving, and release and is not personalized dietary or medical advice or proof of a product label value.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usda.fooddata-central-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.usda.fooddata-central-api",
          "url": "https://fdc.nal.usda.gov/api-guide/",
          "title": "FoodData Central API Guide",
          "publisher": "U.S. Department of Agriculture",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.usda-nass-quick-stats-api",
      "title": "USDA NASS Quick Stats API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for USDA NASS Quick Stats API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "usda-nass-quick-stats-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:207eb464c49c3086988a781ef2ea64613d4d3109cd4ff77dee078d316951e686",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/usda-nass-quick-stats-api.json",
      "htmlPath": "/resources/view/public-data-apis/usda-nass-quick-stats-api",
      "facts": [
        {
          "id": "fact.usda.nass-quick-stats-api.access",
          "statement": "The NASS Quick Stats API provides access to official estimates covering agricultural production and related Census of Agriculture and survey outputs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usda.nass-quick-stats-api"
          ]
        },
        {
          "id": "fact.usda.nass-quick-stats-api.authentication",
          "statement": "Access uses an assigned API key, and queries combine documented what, where, and when parameters rather than one universal series identifier.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usda.nass-quick-stats-api"
          ]
        },
        {
          "id": "fact.usda.nass-quick-stats-api.request",
          "statement": "The main retrieval operation returns at most 50,000 records, so clients must count, narrow, or partition broad requests and preserve selection metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usda.nass-quick-stats-api"
          ]
        },
        {
          "id": "fact.usda.nass-quick-stats-api.boundary",
          "statement": "NASS values are published estimates that can be revised, suppressed, sampled, or method-dependent and do not prove farm-level conditions or future outcomes.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usda.nass-quick-stats-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.usda.nass-quick-stats-api",
          "url": "https://www.nass.usda.gov/developer/",
          "title": "NASS Developer Resources",
          "publisher": "USDA National Agricultural Statistics Service",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.usgs-earthquake-catalog-api",
      "title": "USGS Earthquake Catalog API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for USGS Earthquake Catalog API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "usgs-earthquake-catalog-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:3f7ee2988a39715bb4d6ff95949d80c21dfa22d45247cc2fdf430eaa9281934d",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/usgs-earthquake-catalog-api.json",
      "htmlPath": "/resources/view/public-data-apis/usgs-earthquake-catalog-api",
      "facts": [
        {
          "id": "fact.usgs.earthquake-api.access",
          "statement": "The USGS FDSN Event Web Service supports catalog discovery, counts, version checks, and filtered earthquake queries in several formats.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.earthquake-api"
          ]
        },
        {
          "id": "fact.usgs.earthquake-api.authentication",
          "statement": "Catalog queries are limited to 20,000 events and should use count, time, magnitude, geography, ordering, limit, and offset deliberately.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.earthquake-api"
          ]
        },
        {
          "id": "fact.usgs.earthquake-api.request",
          "statement": "USGS recommends real-time GeoJSON feeds instead of repeated catalog searches for display applications that need current earthquake information.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.earthquake-api"
          ]
        },
        {
          "id": "fact.usgs.earthquake-api.boundary",
          "statement": "Preferred catalog values and event parameters can be updated, so a response is not immutable seismic truth or a substitute for official hazard guidance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.earthquake-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.usgs.earthquake-api",
          "url": "https://earthquake.usgs.gov/fdsnws/event/1/",
          "title": "Earthquake Catalog API Documentation",
          "publisher": "U.S. Geological Survey",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.usgs-fdsn-event-api",
      "title": "USGS FDSN Event API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for USGS FDSN Event API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "usgs-fdsn-event-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T05:32:38Z",
      "contentHash": "sha256:c052eb56d0b42286a14e30de85b18a18c1a5e14eb309ad219c0b11f4067479f7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T05:32:38Z"
      },
      "jsonPath": "/resources/public-data-apis/usgs-fdsn-event-api.json",
      "htmlPath": "/resources/view/public-data-apis/usgs-fdsn-event-api",
      "facts": [
        {
          "id": "fact.usgs.fdsn-event-api.access",
          "statement": "The USGS FDSN Event service exposes earthquake catalog queries, counts, catalog and contributor vocabularies, application metadata, and service version information.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.fdsn-event-api"
          ]
        },
        {
          "id": "fact.usgs.fdsn-event-api.authentication",
          "statement": "Public query access requires no account, but it grants no catalog-editing, alert-issuance, emergency-management, or authoritative interpretation permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.fdsn-event-api"
          ]
        },
        {
          "id": "fact.usgs.fdsn-event-api.request",
          "statement": "Clients must bind time, geographic, magnitude, depth, catalog, contributor, event, ordering, limit, offset, and output format and use real-time GeoJSON feeds for display workloads when advised.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.fdsn-event-api"
          ]
        },
        {
          "id": "fact.usgs.fdsn-event-api.boundary",
          "statement": "Event locations, magnitudes, products, and review status can change, and catalog results do not forecast earthquakes, establish local impact, replace ShakeAlert or hazard products, or provide safety instructions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.fdsn-event-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.usgs.fdsn-event-api",
          "url": "https://earthquake.usgs.gov/fdsnws/event/1/wsdl",
          "title": "Earthquake Catalog API Documentation",
          "publisher": "U.S. Geological Survey",
          "observedAt": "2026-08-28T05:32:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.usgs-national-map-api",
      "title": "USGS National Map API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for USGS National Map API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "usgs-national-map-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T15:06:26Z",
      "contentHash": "sha256:3c555981b6eadd158fce5bdc7c082f9582016cca0b73c376e2aab24f81a6237c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T15:06:26Z"
      },
      "jsonPath": "/resources/public-data-apis/usgs-national-map-api.json",
      "htmlPath": "/resources/view/public-data-apis/usgs-national-map-api",
      "facts": [
        {
          "id": "fact.usgs.national-map-api.access",
          "statement": "The National Map access API supports discovery and download of USGS elevation, imagery, hydrography, boundaries, structures, maps, and other geospatial products.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.national-map-api"
          ]
        },
        {
          "id": "fact.usgs.national-map-api.authentication",
          "statement": "Public product discovery does not require an account and does not grant dataset publication, survey, land-title, emergency, or map-revision authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.national-map-api"
          ]
        },
        {
          "id": "fact.usgs.national-map-api.request",
          "statement": "Clients must bind dataset, extent or geometry, date, product, format, paging, and maximum-result constraints and use returned download links and metadata rather than guessing file locations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.national-map-api"
          ]
        },
        {
          "id": "fact.usgs.national-map-api.boundary",
          "statement": "Products have independent source dates, scales, resolutions, processing methods, and accuracy limits and do not prove property boundaries, current field conditions, navigation safety, or legal jurisdiction.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.national-map-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.usgs.national-map-api",
          "url": "https://apps.nationalmap.gov/tnmaccess/",
          "title": "The National Map access API",
          "publisher": "U.S. Geological Survey",
          "observedAt": "2026-08-28T15:06:26Z"
        }
      ]
    },
    {
      "id": "resource.public-data.usgs-water-data-apis",
      "title": "USGS Water Data APIs boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for USGS Water Data APIs.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "usgs-water-data-apis",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T09:30:00Z",
      "contentHash": "sha256:e97e39e890142ef907e4aee7ad57450b095af152ebc91946a8a9b61f6401f5ce",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T09:30:00Z"
      },
      "jsonPath": "/resources/public-data-apis/usgs-water-data-apis.json",
      "htmlPath": "/resources/view/public-data-apis/usgs-water-data-apis",
      "facts": [
        {
          "id": "fact.usgs.water-data-apis.access",
          "statement": "USGS documents OGC, STAC, water-quality, imagery, and related APIs for sensor measurements, daily values, files, samples, and monitoring-location metadata.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.water-data-apis"
          ]
        },
        {
          "id": "fact.usgs.water-data-apis.authentication",
          "statement": "Some read access is public, while an API key can provide higher rate limits; authentication and availability must be checked for the selected endpoint family.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.water-data-apis"
          ]
        },
        {
          "id": "fact.usgs.water-data-apis.request",
          "statement": "Clients must choose the correct API family and bind monitoring location, parameter, time, format, paging, and provisional-data semantics rather than mix legacy contracts.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.water-data-apis"
          ]
        },
        {
          "id": "fact.usgs.water-data-apis.boundary",
          "statement": "Water measurements and derived values can be provisional, revised, discontinuous, or site-specific and do not alone prove water safety, absence, or regulatory compliance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.usgs.water-data-apis"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.usgs.water-data-apis",
          "url": "https://api.waterdata.usgs.gov/docs/",
          "title": "USGS Water Data APIs",
          "publisher": "U.S. Geological Survey",
          "observedAt": "2026-08-27T09:30:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.uspto-open-data-portal-api",
      "title": "USPTO Open Data Portal API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for USPTO Open Data Portal API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "uspto-open-data-portal-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:cd191c2001eae5c331b22c4bdcfa25a8aa5e5a53f6ef97f9b708465c09c2f0eb",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/uspto-open-data-portal-api.json",
      "htmlPath": "/resources/view/public-data-apis/uspto-open-data-portal-api",
      "facts": [
        {
          "id": "fact.uspto.open-data-portal-api.access",
          "statement": "The USPTO Open Data Portal documents APIs for public patent and trademark datasets, endpoint discovery, query construction, and machine-readable responses.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uspto.open-data-portal-api"
          ]
        },
        {
          "id": "fact.uspto.open-data-portal-api.authentication",
          "statement": "Authentication requirements differ by API and access tier; registered keys or tokens are credentials and must not be embedded in public resource records.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uspto.open-data-portal-api"
          ]
        },
        {
          "id": "fact.uspto.open-data-portal-api.request",
          "statement": "Clients must use the selected API's fields, query syntax, filters, sort, page, and page-size contract and preserve identifiers and source dates across pagination.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uspto.open-data-portal-api"
          ]
        },
        {
          "id": "fact.uspto.open-data-portal-api.boundary",
          "statement": "Patent or trademark data can be application-stage, corrected, delayed, or legally nuanced and does not replace the official record, current legal-status research, or legal advice.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.uspto.open-data-portal-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.uspto.open-data-portal-api",
          "url": "https://data.uspto.gov/apis/getting-started",
          "title": "USPTO Open Data Portal API Getting Started",
          "publisher": "U.S. Patent and Trademark Office",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.vam-collections-api",
      "title": "V&A Collections API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for V&A Collections API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "vam-collections-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:f7871a28c7772cc9049462ecfcd43b862e33260e6a5748138683db6a13d21c59",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/vam-collections-api.json",
      "htmlPath": "/resources/view/public-data-apis/vam-collections-api",
      "facts": [
        {
          "id": "fact.vam.collections-api.access",
          "statement": "Victoria and Albert Museum documents museum objects, people, places, materials, techniques, images, and search facets.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vam.collections-api"
          ]
        },
        {
          "id": "fact.vam.collections-api.authentication",
          "statement": "Documented public reads do not grant collection editing, image rights, ownership, attribution, or museum representation authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vam.collections-api"
          ]
        },
        {
          "id": "fact.vam.collections-api.request",
          "statement": "Clients must bind object identifier, search term, facet, field, page, page size, image size, and returned rights information.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vam.collections-api"
          ]
        },
        {
          "id": "fact.vam.collections-api.boundary",
          "statement": "Object and image metadata can be incomplete, revised, or rights-limited and does not prove authenticity, ownership, valuation, or reuse permission.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.vam.collections-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.vam.collections-api",
          "url": "https://developers.vam.ac.uk/",
          "title": "V&A Collections API documentation",
          "publisher": "Victoria and Albert Museum",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.who-gho-odata-api",
      "title": "WHO Global Health Observatory OData API boundary",
      "summary": "WHO documentation on OData discovery and name, dimension, date and null filters. This review does not verify live API availability, authentication, paging or reuse rights.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "who-gho-odata-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T15:59:00.507Z",
      "contentHash": "sha256:e7263cc6855823558f80aea68ccb73ef20293792d738aef95efdfde00f785352",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T15:59:00.507Z"
      },
      "jsonPath": "/resources/public-data-apis/who-gho-odata-api.json",
      "htmlPath": "/resources/view/public-data-apis/who-gho-odata-api",
      "facts": [
        {
          "id": "fact.who.gho-odata-api.access",
          "statement": "WHO's guide describes OData routes for dimension codes, values within a dimension, indicator metadata, indicator observations and regions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.who.gho-odata-api"
          ]
        },
        {
          "id": "fact.who.gho-odata-api.filters",
          "statement": "IndicatorName supports contains or eq name filters. Observation examples use $filter with dimension fields such as Dim1, joining conditions with and.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.who.gho-odata-api"
          ]
        },
        {
          "id": "fact.who.gho-odata-api.request",
          "statement": "The guide identifies TimeDimensionBegin and TimeDimensionEnd for time filtering; its year example applies date(TimeDimensionBegin) with an inclusive start and exclusive next-year boundary.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.who.gho-odata-api"
          ]
        },
        {
          "id": "fact.who.gho-odata-api.boundary",
          "statement": "Dim1 eq null and Dim1 ne null select observations by missing or present disaggregation. The guide describes XML as the default dimension-list result.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.who.gho-odata-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.who.gho-odata-api",
          "url": "https://www.who.int/data/gho/info/gho-odata-api",
          "title": "GHO OData API",
          "publisher": "World Health Organization",
          "observedAt": "2026-09-06T15:59:00.507Z"
        }
      ]
    },
    {
      "id": "resource.public-data.wikidata-sparql-query-service",
      "title": "Wikidata SPARQL Query Service boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for Wikidata SPARQL Query Service.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "wikidata-sparql-query-service",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-27T08:40:00Z",
      "contentHash": "sha256:c8f26a2ad2cbcf5fd6d68f1729d846e637115f862432c16217aabf02fe27ee86",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-03T08:40:00Z"
      },
      "jsonPath": "/resources/public-data-apis/wikidata-sparql-query-service.json",
      "htmlPath": "/resources/view/public-data-apis/wikidata-sparql-query-service",
      "facts": [
        {
          "id": "fact.wikidata.sparql.access",
          "statement": "The Wikidata Query Service executes SPARQL queries over Wikidata's structured knowledge graph and returns standard query representations.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikidata.sparql"
          ]
        },
        {
          "id": "fact.wikidata.sparql.authentication",
          "statement": "Public queries are subject to execution time, load, and service limits, so broad joins can time out and must be decomposed or optimized.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikidata.sparql"
          ]
        },
        {
          "id": "fact.wikidata.sparql.request",
          "statement": "Clients should identify themselves where required, cache responsibly, and use dumps or alternate access methods for unsuitable bulk workloads.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikidata.sparql"
          ]
        },
        {
          "id": "fact.wikidata.sparql.boundary",
          "statement": "Wikidata statements can be incomplete, disputed, stale, or community-edited; query success is not proof of factual truth or source independence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikidata.sparql"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.wikidata.sparql",
          "url": "https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service",
          "title": "Wikidata SPARQL Query Service",
          "publisher": "Wikimedia Foundation and Wikidata community",
          "observedAt": "2026-08-27T08:40:00Z"
        }
      ]
    },
    {
      "id": "resource.public-data.wikimedia-pageviews-api",
      "title": "Wikimedia Pageviews API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Wikimedia Pageviews API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "wikimedia-pageviews-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:0d882c6c2d89cc7de60dc59bba2f2c855448001b26908b67666a1aaac0e16f77",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/wikimedia-pageviews-api.json",
      "htmlPath": "/resources/view/public-data-apis/wikimedia-pageviews-api",
      "facts": [
        {
          "id": "fact.wikimedia.pageviews.api.access",
          "statement": "Wikimedia Foundation documents aggregated Wikimedia pageview metrics by project, article, access method, agent class, and time interval.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.pageviews.api"
          ]
        },
        {
          "id": "fact.wikimedia.pageviews.api.authentication",
          "statement": "Public aggregate reads do not grant user identity, editor, page, analytics, moderation, or Wikimedia authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.pageviews.api"
          ]
        },
        {
          "id": "fact.wikimedia.pageviews.api.request",
          "statement": "Clients must bind project, access method, agent class, article, granularity, date range, top list, and normalization.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.pageviews.api"
          ]
        },
        {
          "id": "fact.wikimedia.pageviews.api.boundary",
          "statement": "Pageview metrics are aggregated, filtered, cache-sensitive, and bot-classified and do not prove unique people, endorsement, factual quality, intent, or causal impact.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.pageviews.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.wikimedia.pageviews.api",
          "url": "https://wikitech.wikimedia.org/wiki/Analytics/AQS/Pageviews",
          "title": "Wikimedia Pageviews API documentation",
          "publisher": "Wikimedia Foundation",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.wikimedia-rest-api",
      "title": "Wikimedia REST API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for Wikimedia REST API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "wikimedia-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:7978c30126913c31b7aeb1b5214096d2c110b8ea1f67ed584eccfd7136d7d4d7",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/wikimedia-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/wikimedia-rest-api",
      "facts": [
        {
          "id": "fact.wikimedia.rest-api.access",
          "statement": "Wikimedia Foundation documents MediaWiki page, revision, history, search, transform, and site data through REST endpoints.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.rest-api"
          ]
        },
        {
          "id": "fact.wikimedia.rest-api.authentication",
          "statement": "Public reads are separate from authenticated write operations; access does not grant editor identity, page authority, moderation, or factual-verification authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.rest-api"
          ]
        },
        {
          "id": "fact.wikimedia.rest-api.request",
          "statement": "Clients must bind project host, API version, page title or ID, revision, language, representation, conditional headers, and rate guidance.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.rest-api"
          ]
        },
        {
          "id": "fact.wikimedia.rest-api.boundary",
          "statement": "Wiki content is collaborative and mutable, can be disputed or reverted, and does not independently prove factual accuracy, neutrality, identity, or permanence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wikimedia.rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.wikimedia.rest-api",
          "url": "https://www.mediawiki.org/wiki/API:REST_API",
          "title": "Wikimedia REST API documentation",
          "publisher": "Wikimedia Foundation",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.world-bank-indicators-api",
      "title": "World Bank Indicators API boundary",
      "summary": "Official World Bank documentation on Indicators API query construction, date and JSON parameters, pagination, and bounded multi-indicator requests.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "world-bank-indicators-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T14:07:51.154Z",
      "contentHash": "sha256:e94675245a64dcfae6a8dba969b5475781b0a1b24c45d3d9531193175289d7ee",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T14:07:51.154Z"
      },
      "jsonPath": "/resources/public-data-apis/world-bank-indicators-api.json",
      "htmlPath": "/resources/view/public-data-apis/world-bank-indicators-api",
      "facts": [
        {
          "id": "fact.world-bank.indicators-api.access",
          "statement": "The Indicators API accepts both path-based and query-argument requests; the documentation shows equivalent low-income country queries using these two forms.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.world-bank.indicators-api"
          ]
        },
        {
          "id": "fact.world-bank.indicators-api.parameters",
          "statement": "Date filters can select years, months, quarters or colon-separated ranges. Responses default to XML; format=json requests JSON.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.world-bank.indicators-api"
          ]
        },
        {
          "id": "fact.world-bank.indicators-api.request",
          "statement": "The page parameter selects a result page and per_page sets its size; the documented default is 50 results per page. One page is not necessarily the whole result.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.world-bank.indicators-api"
          ]
        },
        {
          "id": "fact.world-bank.indicators-api.boundary",
          "statement": "A multi-indicator request selects one source and separates indicator codes with semicolons. The documented limits are 60 indicators, 1500 characters per path segment and 4000 characters for the entire URL.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.world-bank.indicators-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.world-bank.indicators-api",
          "url": "https://datahelpdesk.worldbank.org/knowledgebase/articles/898581-api-basic-call-structures",
          "title": "API Basic Call Structures",
          "publisher": "World Bank",
          "observedAt": "2026-09-06T14:07:51.154Z"
        }
      ]
    },
    {
      "id": "resource.public-data.worldpop-api",
      "title": "WorldPop REST API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for WorldPop REST API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "worldpop-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T20:35:47.627Z",
      "contentHash": "sha256:5de10a48b8d36a5d5a0bba4fb9a14dab82174954550b76f045ff6e483b12cbc2",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T20:35:47.627Z"
      },
      "jsonPath": "/resources/public-data-apis/worldpop-api.json",
      "htmlPath": "/resources/view/public-data-apis/worldpop-api",
      "facts": [
        {
          "id": "fact.worldpop.api.access",
          "statement": "WorldPop documents population raster metadata, statistical summaries, spatial jobs, dataset selection, status polling, and documented download outputs.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.worldpop.api"
          ]
        },
        {
          "id": "fact.worldpop.api.authentication",
          "statement": "Public reads and submitted processing jobs do not grant demographic, census, territory, policy, identity, or WorldPop authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.worldpop.api"
          ]
        },
        {
          "id": "fact.worldpop.api.request",
          "statement": "Clients must bind dataset, year, geography or geometry, statistic, job identifier, status, output format, license, and citation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.worldpop.api"
          ]
        },
        {
          "id": "fact.worldpop.api.boundary",
          "statement": "Modeled population products have resolution, uncertainty, covariate, boundary, temporal, and methodological limits and do not prove individual location, identity, census counts, eligibility, or current conditions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.worldpop.api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.worldpop.api",
          "url": "https://www.worldpop.org/sdi/introapi",
          "title": "WorldPop REST API documentation",
          "publisher": "WorldPop",
          "observedAt": "2026-08-28T20:35:47.627Z"
        }
      ]
    },
    {
      "id": "resource.public-data.worms-rest-api",
      "title": "WoRMS REST API boundary",
      "summary": "Official-source access, authentication, request-shaping, freshness, legal, and interpretation boundaries for WoRMS REST API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "worms-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T18:03:05Z",
      "contentHash": "sha256:bfc1dadbc298cbde283c57ecf797ce16c03e49a2ebc370bd7961e855879a85b5",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T18:03:05Z"
      },
      "jsonPath": "/resources/public-data-apis/worms-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/worms-rest-api",
      "facts": [
        {
          "id": "fact.marinespecies.worms-api.access",
          "statement": "World Register of Marine Species documents marine taxon names, accepted names, classifications, synonyms, distributions, traits, and sources.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.marinespecies.worms-api"
          ]
        },
        {
          "id": "fact.marinespecies.worms-api.authentication",
          "statement": "Public reads do not grant taxonomic editing, nomenclatural, species-identification, publication, or management authority.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.marinespecies.worms-api"
          ]
        },
        {
          "id": "fact.marinespecies.worms-api.request",
          "statement": "Clients must bind Aphia identifier, scientific name, rank, marine-only flag, fuzzy matching, paging, and output representation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.marinespecies.worms-api"
          ]
        },
        {
          "id": "fact.marinespecies.worms-api.boundary",
          "statement": "Taxonomic and distribution records can be revised, disputed, historical, or source-dependent and do not prove specimen identity or current occurrence.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.marinespecies.worms-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.marinespecies.worms-api",
          "url": "https://www.marinespecies.org/rest/",
          "title": "WoRMS REST API documentation",
          "publisher": "World Register of Marine Species",
          "observedAt": "2026-08-28T18:03:05Z"
        }
      ]
    },
    {
      "id": "resource.public-data.wto-timeseries-api",
      "title": "WTO Timeseries API boundary",
      "summary": "Official-source access, authentication, request-shaping, paging, freshness, legal, and interpretation boundaries for WTO Timeseries API.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "wto-timeseries-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.0",
      "observedAt": "2026-08-28T04:17:38Z",
      "contentHash": "sha256:1e04063d4d11115717aa9aa22beeca57e31660e90396b1a5c5a70880ad84957c",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-04T04:17:38Z"
      },
      "jsonPath": "/resources/public-data-apis/wto-timeseries-api.json",
      "htmlPath": "/resources/view/public-data-apis/wto-timeseries-api",
      "facts": [
        {
          "id": "fact.wto.timeseries-api.access",
          "statement": "The WTO API portal documents time-series access to trade, tariff, and non-tariff information with indicator, economy, partner, product, period, and frequency dimensions.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wto.timeseries-api"
          ]
        },
        {
          "id": "fact.wto.timeseries-api.authentication",
          "statement": "Use requires portal registration and a subscription key; the key is a credential and does not grant access beyond the subscribed API products.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wto.timeseries-api"
          ]
        },
        {
          "id": "fact.wto.timeseries-api.request",
          "statement": "Clients must select the API version and bind indicator codes, reporting and partner economies, product classifications, periods, format, and pagination where documented.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wto.timeseries-api"
          ]
        },
        {
          "id": "fact.wto.timeseries-api.boundary",
          "statement": "WTO series can be reported, estimated, revised, aggregated, classification-dependent, or missing and do not prove causation, current customs treatment, or a trade recommendation.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.wto.timeseries-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.wto.timeseries-api",
          "url": "https://apiportal.wto.org/",
          "title": "WTO API Developer Portal",
          "publisher": "World Trade Organization",
          "observedAt": "2026-08-28T04:17:38Z"
        }
      ]
    },
    {
      "id": "resource.public-data.zenodo-rest-api",
      "title": "Zenodo REST API boundary",
      "summary": "Zenodo documentation boundaries for record reads, deposit scopes, sandbox separation and metadata harvesting; this review does not verify live API execution or reuse rights.",
      "category": "public-data-apis",
      "resourceCategory": "public-data-api",
      "slug": "zenodo-rest-api",
      "language": "en",
      "state": "prepared",
      "version": "1.0.1",
      "observedAt": "2026-09-06T19:38:53.679Z",
      "contentHash": "sha256:535fda10965d18722a2d34eaa6bcb1afed55257901a9f444e9e1d2d7de2ff894",
      "freshness": {
        "state": "current",
        "nextReviewAt": "2026-09-13T19:38:53.679Z"
      },
      "jsonPath": "/resources/public-data-apis/zenodo-rest-api.json",
      "htmlPath": "/resources/view/public-data-apis/zenodo-rest-api",
      "facts": [
        {
          "id": "fact.zenodo.rest-api.access",
          "statement": "Records documentation lists GET /api/records/ and GET /api/records/:id, with size maxima of 25 for anonymous and 100 for authenticated searches. Its general all-requests-authenticated statement conflicts with this anonymous allowance; live anonymous access is unverified.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.zenodo.rest-api"
          ]
        },
        {
          "id": "fact.zenodo.rest-api.authentication",
          "statement": "Documented OAuth scopes separate deposit:write, which cannot publish, from deposit:actions for publication, editing and discarding edits. Tokens should remain private and travel over HTTPS in the Authorization header rather than URL parameters.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.zenodo.rest-api"
          ]
        },
        {
          "id": "fact.zenodo.rest-api.request",
          "statement": "The sandbox at https://sandbox.zenodo.org requires separate registration and tokens from https://zenodo.org, may be cleared at any time, and issues test DOIs under 10.5072 rather than production prefix 10.5281.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.zenodo.rest-api"
          ]
        },
        {
          "id": "fact.zenodo.rest-api.boundary",
          "statement": "For bulk access the guide recommends OAI-PMH or metadata dumps instead of search loops. OAI-PMH documents 50 records per page and two-minute resumption tokens, with expiry returning 422; metadata and file access rights must not be conflated.",
          "normativeLevel": "informative",
          "sourceIds": [
            "source.zenodo.rest-api"
          ]
        }
      ],
      "provenanceSources": [
        {
          "id": "source.zenodo.rest-api",
          "url": "https://developers.zenodo.org/",
          "title": "Developers | Zenodo",
          "publisher": "CERN and Zenodo",
          "observedAt": "2026-09-06T19:38:53.679Z"
        }
      ]
    }
  ],
  "boundaries": {
    "generatedIndexIsNotAProductionQualityPromotion": true,
    "generatedIndexIsNotOrganicUseEvidence": true,
    "generatedIndexIsNotSearchIndexingEvidence": true,
    "walletInteraction": false,
    "niulaiTransaction": false
  }
}
