{
  "manifest_version": "1.0.0",
  "semantic_id": "dk_datafordeler_graphql_service_catalog_v1",
  "resource_scope": "service",
  "data_status": "SOURCE",
  "intent": {
    "scientific_purpose": "Describe the Datafordeler GraphQL service layer and register endpoint stubs so dataset manifests can reference one shared service contract.",
    "research_question_links": [
      "Which register code maps to which GraphQL endpoint stub?",
      "How should agents discover available register services before querying data manifests?"
    ]
  },
  "provenance": {
    "source_origin": "Datafordeler GraphQL service documentation",
    "acquisition_date": "2026-04-03",
    "licence": "Institutional Datafordeler agreement and register-specific terms",
    "source_manifest_refs": [
      "https://confluence.sdfi.dk/pages/viewpage.action?pageId=187105434",
      "data_sanctuary/shared/datafordeler_graphql_contract.md"
    ]
  },
  "grounding_logic": {
    "type": "api",
    "uri": "https://graphql.datafordeler.dk/",
    "layer_filter": "register and version selected via endpoint stub",
    "crs": "EPSG:25832",
    "geometry_type": "NONE",
    "join_hints": []
  },
  "privacy_governance": {
    "gdpr_classification": "Public",
    "retention_period": "Project duration + 5 years",
    "access_requirements": "Institutional API key and register permissions",
    "ethical_risks": [
      "Querying wrong register/version can produce misleading analytical inputs."
    ]
  },
  "sanitisation_rituals": [
    "Resolve register code to endpoint before query composition.",
    "Validate service version and schema signature before production extraction."
  ],
  "attributes": [
    {
      "name": "register_code",
      "logical_type": "Nominal",
      "meaning": "Short register identifier used in GraphQL endpoint URLs.",
      "provenance_level": "source"
    },
    {
      "name": "endpoint_stub",
      "logical_type": "Nominal",
      "meaning": "Service URL suffix of the form <register>/<version>.",
      "provenance_level": "source"
    }
  ],
  "agent_hints": {
    "recommended_filters": [
      "Select register-specific endpoint from service_stubs before dataset query planning.",
      "Keep service version explicit in all query logs."
    ],
    "known_pitfalls": [
      "Using the wrong register code or version can return valid but irrelevant schema.",
      "Permissions may differ by register even with one API key."
    ],
    "quality_notes": [
      "This service catalog is intended to be referenced by all Datafordeler dataset manifests."
    ]
  },
  "shared_contract_refs": [
    "data_sanctuary/sources/datafordeler.platform.manifest.v1.json",
    "data_sanctuary/shared/datafordeler_graphql_contract.md",
    "data_sanctuary/shared/time_semantics_shared.md"
  ],
  "platform_links": [
    "https://semanticgis.dk"
  ],
  "execution_contract": {
    "interface_type": "graphql",
    "auth": {
      "scheme": "apikey",
      "location": "query_param",
      "parameter_name": "apikey",
      "required_permissions": [
        "register-specific access rights"
      ]
    },
    "pagination": {
      "style": "cursor",
      "page_size_param": "first",
      "cursor_param": "after",
      "recommended_page_size": 200,
      "max_page_size": 1000
    },
    "timeouts": {
      "server_timeout_seconds": 60,
      "retry_strategy": "reduce page size and use staged extraction on timeout"
    },
    "time_parameters": {
      "supports_virkningstid": true,
      "supports_registreringstid": true,
      "default_query_mode": "register_default"
    },
    "filterability_notes": [
      "Filterability is entity-specific; inspect register schema FilterInput before building where clauses."
    ],
    "known_error_codes": [
      "400",
      "401",
      "HC0045"
    ]
  },
  "service_stubs": [
    {
      "register_code": "BBR",
      "register_name": "Bygnings- og Boligregistret",
      "endpoint_stub": "BBR/v1"
    },
    {
      "register_code": "DAR",
      "register_name": "Danmarks Adresseregister",
      "endpoint_stub": "DAR/v1"
    },
    {
      "register_code": "FIKSPUNKT",
      "register_name": "Danmarks Fikspunktregister",
      "endpoint_stub": "FIKSPUNKT/v1"
    },
    {
      "register_code": "DHMHoejdekurver",
      "register_name": "DHM Højdekurver",
      "endpoint_stub": "DHMHoejdekurver/v1"
    },
    {
      "register_code": "DHMOprindelse",
      "register_name": "DHM Oprindelse",
      "endpoint_stub": "DHMOprindelse/v1"
    },
    {
      "register_code": "DS",
      "register_name": "Danske Stednavne",
      "endpoint_stub": "DS/v1"
    },
    {
      "register_code": "CPR",
      "register_name": "Det Centrale Personregister",
      "endpoint_stub": "CPR/v1"
    },
    {
      "register_code": "CVR",
      "register_name": "Det Centrale Virksomhedsregister",
      "endpoint_stub": "CVR/v1"
    },
    {
      "register_code": "EBR",
      "register_name": "Ejendomsbeliggenhedsregistret",
      "endpoint_stub": "EBR/v1"
    },
    {
      "register_code": "VUR",
      "register_name": "Ejendomsvurdering",
      "endpoint_stub": "VUR/v1"
    },
    {
      "register_code": "EJF",
      "register_name": "Ejerfortegnelsen",
      "endpoint_stub": "EJF/v1"
    },
    {
      "register_code": "GEODKV",
      "register_name": "GeoDanmark Vektor",
      "endpoint_stub": "GEODKV/v1"
    },
    {
      "register_code": "HISTKORT",
      "register_name": "Historiske kort og data",
      "endpoint_stub": "HISTKORT/v1"
    },
    {
      "register_code": "MAT",
      "register_name": "Matriklen2",
      "endpoint_stub": "MAT/v1"
    },
    {
      "register_code": "SVR",
      "register_name": "Skatteforvaltningens Virksomhedsregister",
      "endpoint_stub": "SVR/v1"
    }
  ]
}
