{
  "openapi": "3.1.0",
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "info": {
    "title": "Schleswig MCP REST API",
    "version": "1.0.0",
    "description": "An independent open-data project for Schleswig city, Germany (AGS 01059075), not operated or endorsed by the City of Schleswig. All endpoints use GET and return JSON. No API key is required. Browser requests must be same-origin; cross-origin access is not enabled. Host and Origin checks apply.\n\nWater level is fetched live; all other datasets are prepared snapshots. Snapshot responses contain metadata, data, pagination and notices. metadata.license.attribution retains source credits; preserve required credits, license URLs and processing notices when reusing data. Dataset licenses differ and do not license this application. German original content is preserved.\n\nmetadata.dates separates dataAsOf, sourcePublishedAt, sourceUpdatedAt, retrievedAt and curatedAt. Null means unknown or unproven, not the build date. Coordinates, when present, use EPSG:4326 unless explicitly documented otherwise. Optional properties can be absent; nullable properties can contain explicit nulls. The server also validates cross-field relationships that are not fully represented in the generated schemas.\n\nList examples contain one packaged snapshot record. The water-level example is synthetic, not a current measurement. See [MCP documentation](/mcp-docs) for the Streamable HTTP service, which returns the same domain data."
  },
  "servers": [
    {
      "url": "/",
      "description": "This origin (local, preview or production)"
    }
  ],
  "paths": {
    "/api/v1/schleswig/water-level": {
      "get": {
        "operationId": "getWaterLevel",
        "summary": "Latest water level",
        "description": "Live PEGELONLINE measurement for station SCHLESWIG. No query parameters. Values are centimetres relative to gauge zero, not water depth. Unvalidated raw measurements are not navigation advice or flood warnings. Measurements older than 15 minutes still return 200 with freshness.isStale=true. Each request fetches upstream data with a five-second timeout; avoid unnecessary polling.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Latest available reading, including freshness and source license.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WaterLevel"
                },
                "examples": {
                  "sample": {
                    "summary": "Synthetic historical reading, not a current measurement",
                    "value": {
                      "station": {
                        "id": "09370c05-1041-4395-a5d4-b8db6e59c4c8",
                        "number": "9610040",
                        "name": "SCHLESWIG",
                        "water": "OSTSEE"
                      },
                      "measurement": {
                        "value": 521,
                        "unit": "cm",
                        "timestamp": "2026-10-14T13:24:00Z",
                        "reference": "gauge_zero"
                      },
                      "freshness": {
                        "fetchedAt": "2026-10-14T13:25:00Z",
                        "ageSeconds": 60,
                        "isStale": false,
                        "staleAfterSeconds": 900
                      },
                      "source": {
                        "name": "PEGELONLINE",
                        "url": "https://pegelonline.wsv.de/webservices/rest-api/v2/stations/09370c05-1041-4395-a5d4-b8db6e59c4c8.json?includeTimeseries=true&includeCurrentMeasurement=true",
                        "license": "DL-DE-Zero-2.0",
                        "licenseUrl": "https://www.govdata.de/dl-de/zero-2-0"
                      },
                      "notices": [
                        "Water level relative to the station gauge zero; this is not water depth.",
                        "PEGELONLINE provides unvalidated raw measurements."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "502": {
            "description": "Unavailable or invalid upstream response (UPSTREAM_UNAVAILABLE or INVALID_UPSTREAM_RESPONSE).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "UPSTREAM_UNAVAILABLE",
                    "message": "PEGELONLINE is currently unavailable."
                  }
                }
              }
            }
          },
          "503": {
            "description": "No current measurement available.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "MEASUREMENT_UNAVAILABLE",
                    "message": "No current water-level measurement is available for Schleswig."
                  }
                }
              }
            }
          },
          "504": {
            "description": "PEGELONLINE did not respond in time.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "UPSTREAM_TIMEOUT",
                    "message": "PEGELONLINE did not respond in time."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/water-level-history": {
      "get": {
        "operationId": "listWaterLevelHistory",
        "summary": "List daily water levels",
        "description": "Daily minimum, mean and maximum of raw PEGELONLINE measurements at station SCHLESWIG, one record per calendar day in Europe/Berlin, newest first. The record ID is the date; q matches date prefixes such as 2026-10. A scheduled pipeline appends complete days after review; stored days are never rewritten. PEGELONLINE only serves the last 31 days, so the history starts with the first collection run. Values are centimetres relative to gauge zero, not water depth; measurementCount below 1440 indicates source gaps.\n\nExample request: `GET /api/v1/schleswig/water-level-history?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WaterLevelHistoryPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-water-level-daily",
                        "title": "Daily Water Levels at Gauge Schleswig",
                        "description": "Daily minimum, mean and maximum of raw PEGELONLINE water-level measurements at gauge SCHLESWIG (Schlei), aggregated per calendar day in Europe/Berlin. Values are centimetres relative to gauge zero, not water depth.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": "2026-10-20",
                          "sourcePublishedAt": null,
                          "sourceUpdatedAt": null,
                          "retrievedAt": "2026-10-21T13:50:59.252Z",
                          "curatedAt": "2026-10-21T13:50:59.252Z"
                        },
                        "source": {
                          "provider": "PEGELONLINE",
                          "publisher": "Wasserstraßen- und Schifffahrtsverwaltung des Bundes (WSV)",
                          "catalog": null,
                          "url": "https://pegelonline.wsv.de/webservice/ueberblick",
                          "downloadUrl": "https://pegelonline.wsv.de/webservices/rest-api/v2/stations/09370c05-1041-4395-a5d4-b8db6e59c4c8/W/measurements.json?start=P31D",
                          "format": "JSON"
                        },
                        "license": {
                          "id": "DL-DE-Zero-2.0",
                          "url": "https://www.govdata.de/dl-de/zero-2-0",
                          "attribution": "Wasserstraßen- und Schifffahrtsverwaltung des Bundes (WSV), PEGELONLINE"
                        },
                        "temporalCoverage": {
                          "years": [
                            2026
                          ]
                        },
                        "processing": {
                          "steps": [
                            "Fetched the raw W measurement series of the last 31 days from the PEGELONLINE REST API.",
                            "Grouped measurements by calendar day in Europe/Berlin; skipped the incomplete first day of the window and the current day.",
                            "Computed minimum, maximum, arithmetic mean (rounded to 0.1 cm) and the number of measurements per day.",
                            "Appended new days only; days already stored are never rewritten."
                          ]
                        },
                        "recordCount": 30
                      },
                      "data": [
                        {
                          "id": "2026-10-20",
                          "date": "2026-10-20",
                          "unit": "cm",
                          "reference": "gauge_zero",
                          "minimum": 535,
                          "mean": 545.8,
                          "maximum": 558,
                          "measurementCount": 1440
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 30,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Newest day first. Daily minimum, mean and maximum of unvalidated raw PEGELONLINE measurements, aggregated by this project per calendar day in Europe/Berlin.",
                        "Values are centimetres relative to gauge zero, not water depth. A measurementCount below 1440 (one per minute) indicates gaps in the source series.",
                        "PEGELONLINE only serves the last 31 days, so the history starts when collection started and cannot be backfilled. q matches date prefixes such as 2026-10."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/addresses": {
      "get": {
        "operationId": "listAddress",
        "summary": "List addresses",
        "description": "Prepared ALKIS address snapshot for Schleswig. Search street, house number/addition and postal code. Coordinates use EPSG:4326. Postal codes were not reconciled with Deutsche Post. Nullable addressExtra and postalCode are explicit nulls, not omitted properties.\n\nExample request: `GET /api/v1/schleswig/addresses?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddressPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-addresses",
                        "title": "Addresses in Schleswig",
                        "description": "Official ALKIS house coordinates for Schleswig, transformed to WGS 84.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": "2026-06-01",
                          "sourcePublishedAt": null,
                          "sourceUpdatedAt": null,
                          "retrievedAt": null,
                          "curatedAt": null
                        },
                        "source": {
                          "provider": "LVermGeo SH",
                          "publisher": "Landesamt für Vermessung und Geoinformation Schleswig-Holstein",
                          "catalog": null,
                          "url": "https://geodaten.schleswig-holstein.de/gaialight-sh/_apps/dladownload/dl-hk_alkis.html",
                          "downloadUrl": null,
                          "format": "UTF-8 semicolon-separated TXT"
                        },
                        "license": {
                          "id": "CC-BY-4.0",
                          "url": "https://creativecommons.org/licenses/by/4.0/",
                          "attribution": "©GeoBasis-DE/LVermGeo SH/CC BY 4.0 (Quelle verändert)"
                        },
                        "coordinateReferenceSystem": "EPSG:4326",
                        "processing": {
                          "steps": [
                            "Filtered by official state 01, district 59 and municipality 075; verified administrative region 0 and AGS 01059075.",
                            "Selected address fields, preserving original OIDs, street names, string identifiers and source record order.",
                            "Converted empty address extras and postal codes to null.",
                            "Transformed EPSG:25832 easting/northing to EPSG:4326 latitude/longitude with pyproj 3.7.2 and PROJ 9.5.1, without decimal rounding.",
                            "Verified field preservation, municipality membership, unique IDs, coordinate ranges, reference points and inverse coordinate transformations."
                          ]
                        },
                        "recordCount": 7619
                      },
                      "data": [
                        {
                          "id": "DESHPDHK0002Nh66",
                          "street": "Abelsteg",
                          "streetCode": "00001",
                          "houseNumber": "1",
                          "addressExtra": null,
                          "postalCode": "24837",
                          "latitude": 54.495393021595085,
                          "longitude": 9.528569497620593
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 7619,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Coordinates use EPSG:4326. Postal codes were not reconciled with Deutsche Post."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/monuments": {
      "get": {
        "operationId": "listMonument",
        "summary": "List cultural monuments",
        "description": "Prepared, non-exhaustive cultural monument register. Search name or address. Numeric source object identifiers are exposed as string IDs. Optional address, protection and photo fields may be absent. Photo URLs are references; images are not fetched or hosted.\n\nExample request: `GET /api/v1/schleswig/monuments?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MonumentPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-monuments",
                        "title": "Cultural Monuments in Schleswig",
                        "description": "Listed cultural monuments within the city of Schleswig.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": "2026-10-12",
                          "sourcePublishedAt": "2026-10-12",
                          "sourceUpdatedAt": "2026-10-12",
                          "retrievedAt": null,
                          "curatedAt": null
                        },
                        "source": {
                          "provider": "Landesamt für Denkmalpflege Schleswig-Holstein",
                          "publisher": "Landesamt für Denkmalpflege Schleswig-Holstein",
                          "catalog": "Open Data SH",
                          "url": "https://opendata.schleswig-holstein.de/dataset/denkmalliste-2026-10-12",
                          "downloadUrl": "https://opendata.schleswig-holstein.de/dataset/f67c373c-3665-4ddf-946b-285b550a72a4/resource/810e96ef-0cf3-445a-a3ce-080d77696930/download/denkmalliste.json",
                          "format": "JSON"
                        },
                        "license": {
                          "id": "CC-BY-4.0",
                          "url": "https://creativecommons.org/licenses/by/4.0/",
                          "attribution": "Landesamt für Denkmalpflege Schleswig-Holstein"
                        },
                        "processing": {
                          "steps": [
                            "Selected records for Schleswig, Stadt in Kreis Schleswig-Flensburg.",
                            "Renamed source fields to English keys; preserved object identifiers, protection details and photo URLs.",
                            "Restored the original German description for object 10545 and name for object 9381 after detecting unintended text replacement."
                          ]
                        },
                        "recordCount": 251
                      },
                      "data": [
                        {
                          "id": "33001",
                          "name": "Fischersiedlung Holm in Schleswig",
                          "description": "Der Denkmalbereich umfasst die historische Fischersiedlung Holm einschließlich des ehemaligen Zugangs von der Schleswiger Altstadt (Fischbrückstraße), der der Lage des ehemaligen Steintors entspricht. Der Denkmalbereich wird im Wesentlichen wie folgt begrenzt: 1. im Norden und Nordwesten durch die Fahrbahn der Knud-Laward-Straße und einem Geviert an der Fischbrückstraße (Nummer 15, 16 und 18),2. im Osten durch die Fahrbahnen der Straße Wiesengang und der Grundstücksgrenze des Klosterbereichs St. Johannis am Nienstall,3. im Südwesten und Süden durch die nördliche Uferlinie der Schlei.",
                          "heritageType": "Schutzzone",
                          "municipality": "Schleswig, Stadt",
                          "district": "Kreis Schleswig-Flensburg"
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 251,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Snapshot of a non-exhaustive register. Photo URLs are source references; image contents are not fetched."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/bathing-waters": {
      "get": {
        "operationId": "listBathingWater",
        "summary": "List bathing waters",
        "description": "Prepared bathing-water reference locations. Search name or keywords. No current water quality, opening status or swimming safety assessment. Use EPSG:4326 longitude/latitude: the source declares EPSG:4647 for projected coordinates, but its eastings omit the zone prefix. The original values and declaration remain documented in metadata.projectedCoordinates.\n\nExample request: `GET /api/v1/schleswig/bathing-waters?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BathingWaterPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-bathing-waters",
                        "title": "Bathing Waters in Schleswig",
                        "description": "Bathing-water reference locations and characteristics for Schleswig; no current water-quality assessment.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": null,
                          "sourcePublishedAt": "2026-04-01",
                          "sourceUpdatedAt": "2026-04-01",
                          "retrievedAt": null,
                          "curatedAt": null
                        },
                        "source": {
                          "provider": "Ministerium für Justiz und Gesundheit Schleswig-Holstein",
                          "publisher": "Ministerium für Justiz und Gesundheit Schleswig-Holstein",
                          "catalog": "GovData",
                          "url": "https://www.govdata.de/suche/daten/badegewasser-stammdaten",
                          "downloadUrl": "https://efi2.schleswig-holstein.de/bg/opendata/v_badegewaesser_odata.csv",
                          "format": "ISO-8859-1 pipe-separated CSV"
                        },
                        "license": {
                          "id": "CC-BY-4.0",
                          "url": "https://creativecommons.org/licenses/by/4.0/",
                          "attribution": "Sozialministerium S-H"
                        },
                        "coordinateReferenceSystem": "EPSG:4326",
                        "projectedCoordinates": {
                          "fields": [
                            "utmEasting",
                            "utmNorthing"
                          ],
                          "sourceDeclaredCrs": "EPSG:4647",
                          "note": "Source metadata declares EPSG:4647, but the retained eastings have no zone prefix. Values are preserved; use longitude/latitude for spatial operations."
                        },
                        "processing": {
                          "steps": [
                            "Selected Schleswig city records with district code 59 and municipality code 075.",
                            "Selected and renamed attributes; converted numeric strings to numbers and registration dates to ISO dates.",
                            "Converted empty optional values to null and split comma-separated keywords.",
                            "Removed trailing HTML line breaks from the Luisenbad description; retained source coordinate values without transformation."
                          ]
                        },
                        "recordCount": 2
                      },
                      "data": [
                        {
                          "id": "DESH_PR_0349",
                          "name": "Schlei, Schleswig, Auf der Freiheit",
                          "waterCategory": "Küstengewässer",
                          "coastalSea": "Ostsee",
                          "bathingWaterType": "bereits bestehendes Badegewässer",
                          "additionalDescription": "natürlich",
                          "euRegistrationDate": "2018-04-15",
                          "euDeregistrationDate": null,
                          "riverBasinDistrictId": "9610",
                          "riverBasinDistrictName": "Schlei / Trave",
                          "waterBodyId": "B2.9610.07.04",
                          "waterBodyName": "innere Schlei",
                          "keywords": [
                            "Schlei",
                            "Schleswig",
                            "Auf Der Freiheit"
                          ],
                          "districtCode": "59",
                          "districtName": "Schleswig-Flensburg",
                          "municipalityCode": "075",
                          "municipalityName": "Schleswig, Stadt",
                          "utmEasting": 538025.01093039,
                          "utmNorthing": 6040459.002811428,
                          "longitude": 9.588478374263024,
                          "latitude": 54.51195046051083,
                          "bathingSiteInformation": "Die Badestelle \"Auf der Freiheit\" befindet sich auf einem ehemaligen Bundeswehrgelände. Mittlerweile sind hier großzügig gestaltete Grünanlagen mit zahlreichen Sitzmöglichkeiten direkt am Schleiufer der \"Kleinen Breite\" geschaffen worden. In unmittelbarer Nähe der Badestelle wird das Restaurant/Hotel \"Strandleben\" betrieben. Neben dem kleinen sandigen Strand gibt es große Grasliegeflächen.",
                          "impactAssessment": "Unter normalen Wetter- und Umgebungsbedingungen sind keine Auswirkungen auf die Badegewässerqualität bekannt",
                          "potentialPollutionSources": null
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 2,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Reference data only; no current water quality, opening status or swimming safety assessment.",
                        "Use longitude/latitude. The source declaration of the projected coordinate system is inconsistent with its unprefixed eastings."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/charging-stations": {
      "get": {
        "operationId": "listChargingStation",
        "summary": "List charging stations",
        "description": "Prepared, non-exhaustive charging infrastructure register. Search operator, display name or street/house number. Register status does not indicate live connector availability. Opening hours retain the source code without separate weekday/time details. Nullable text fields remain explicit nulls. Coordinates use EPSG:4326.\n\nExample request: `GET /api/v1/schleswig/charging-stations?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChargingStationPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-charging-stations",
                        "title": "Public Charging Stations in Schleswig",
                        "description": "Registered publicly accessible electric vehicle charging infrastructure in Schleswig; no live connector availability.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": "2026-09-01",
                          "sourcePublishedAt": null,
                          "sourceUpdatedAt": "2026-09-01",
                          "retrievedAt": null,
                          "curatedAt": null
                        },
                        "source": {
                          "provider": "Bundesnetzagentur",
                          "publisher": "Bundesnetzagentur",
                          "catalog": null,
                          "url": "https://www.bundesnetzagentur.de/DE/Fachthemen/ElektrizitaetundGas/E-Mobilitaet/Ladesaeulenkarte/start.html",
                          "downloadUrl": "https://data.bundesnetzagentur.de/Bundesnetzagentur/DE/Fachthemen/ElektrizitaetundGas/E-Mobilitaet/Ladesaeulenregister_BNetzA_2026-09-01.csv",
                          "format": "UTF-8 semicolon-separated CSV with preamble"
                        },
                        "license": {
                          "id": "CC-BY-4.0",
                          "url": "https://creativecommons.org/licenses/by/4.0/",
                          "attribution": "Bundesnetzagentur.de"
                        },
                        "coordinateReferenceSystem": "EPSG:4326",
                        "processing": {
                          "steps": [
                            "Selected Ort Schleswig, postal code 24837 and state Schleswig-Holstein.",
                            "Selected and renamed fields; grouped addresses, coordinates, charging points and connectors.",
                            "Converted decimal commas to numbers and commissioning dates to ISO dates.",
                            "Converted empty optional fields and unspecified opening hours to null; split payment methods and connector lists and removed empty list entries.",
                            "Retained the source opening-hours code; omitted separate weekday and time-detail columns."
                          ]
                        },
                        "recordCount": 61
                      },
                      "data": [
                        {
                          "id": "1040095",
                          "operator": "Stadtwerke SH GmbH & Co. KG",
                          "displayName": "Stadtwerke SH",
                          "status": "In Betrieb",
                          "stationType": "Normalladeeinrichtung",
                          "chargingPointCount": 2,
                          "ratedPowerKw": 22,
                          "commissionedAt": "2017-03-10",
                          "address": {
                            "street": "Friedrich-Ebert-Straße",
                            "houseNumber": "1",
                            "addressSuffix": null,
                            "postalCode": "24837",
                            "city": "Schleswig"
                          },
                          "coordinates": {
                            "latitude": 54.518628,
                            "longitude": 9.551668
                          },
                          "locationName": null,
                          "parkingInformation": null,
                          "paymentMethods": [],
                          "openingHours": null,
                          "chargingPoints": [
                            {
                              "position": 1,
                              "connectors": [
                                {
                                  "connectorType": "AC Typ 2 Steckdose",
                                  "ratedPowerKw": 22
                                }
                              ],
                              "evseId": null,
                              "publicKey": null
                            },
                            {
                              "position": 2,
                              "connectors": [
                                {
                                  "connectorType": "AC Typ 2 Steckdose",
                                  "ratedPowerKw": 22
                                }
                              ],
                              "evseId": null,
                              "publicKey": null
                            }
                          ]
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 61,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Register status is not live connector availability. The register is not exhaustive.",
                        "Opening hours retain the source code; separate weekday and time details are not included."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/population-forecast": {
      "get": {
        "operationId": "listPopulation",
        "summary": "List population forecast indicators",
        "description": "Prepared indicators with year/value pairs for 2018, 2020, 2030, 2035 and 2040; no 2025 axis. Search indicator name. Historical inputs and projections are not all observed counts. Units vary by indicator; null values are missing, not zero. Pagination counts 39 indicators, while metadata.recordCount counts the single Gold source document.\n\nExample request: `GET /api/v1/schleswig/population-forecast?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PopulationPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-population-forecast",
                        "title": "Population Projection for Schleswig through 2040",
                        "description": "One projection document for Schleswig with 39 indicators and historical inputs; values are not all observed population counts.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": null,
                          "sourcePublishedAt": "2025-03-21",
                          "sourceUpdatedAt": "2025-06-04",
                          "retrievedAt": null,
                          "curatedAt": null
                        },
                        "source": {
                          "provider": "Wegweiser Kommune",
                          "publisher": "Bertelsmann Stiftung",
                          "catalog": "GovData",
                          "url": "https://www.wegweiser-kommune.de/vorausberechnung-2019-2040-schleswig-holstein",
                          "downloadUrl": "https://www.wegweiser-kommune.de/data-api/rest/statistics/data/demografie-bevoelkerungsstand+demografische-prognose-bewegung+bevoelkerung-nach-altersgruppen-1+anteile-der-altersgruppen-1-1+entwicklung-der-altersgruppen-1+generationsentwicklung+gemeinden-und-staedte-und-landkreise-aus-schleswig-holstein+schleswig-holstein+2018-2040+tabelle",
                          "format": "JSON"
                        },
                        "license": {
                          "id": "CC0-1.0",
                          "url": "https://creativecommons.org/publicdomain/zero/1.0/",
                          "attribution": "Bertelsmann Stiftung; Statistische Ämter der Länder, FDZ der Statistischen Ämter des Bundes und der Länder, Deenst GmbH, eigene Berechnungen"
                        },
                        "temporalCoverage": {
                          "years": [
                            2018,
                            2020,
                            2030,
                            2035,
                            2040
                          ]
                        },
                        "processing": {
                          "steps": [
                            "Selected region Schleswig with AGS 01059075 and its indicator value arrays.",
                            "Preserved the year axis, indicator definitions, source credits and null values.",
                            "Updated region selection metadata and indicator minima/maxima for the selected municipality.",
                            "Wrapped the prepared source document in the common metadata/data envelope."
                          ]
                        },
                        "recordCount": 1
                      },
                      "data": [
                        {
                          "id": "336",
                          "name": "Bevölkerung",
                          "unit": "Einwohner:innen",
                          "explanation": "Dargestellt wird die Anzahl der Personen, die am 31.12. des jeweiligen Jahres in der Kommune leben.",
                          "calculation": "Bevölkerung im Jahr z",
                          "source": "Statistische Ämter der Länder,FDZ der Statistischen Ämter des Bundes und der Länder, Deenst GmbH, eigene Berechnungen",
                          "values": [
                            {
                              "year": 2018,
                              "value": 25280
                            },
                            {
                              "year": 2020,
                              "value": 25320
                            },
                            {
                              "year": 2030,
                              "value": 26580
                            },
                            {
                              "year": 2035,
                              "value": 26650
                            },
                            {
                              "year": 2040,
                              "value": 26600
                            }
                          ]
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 39,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Projection with historical inputs; values are not all observed population counts.",
                        "metadata.recordCount counts Gold documents; pagination counts indicators. Null values remain missing, not zero."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/population": {
      "get": {
        "operationId": "listPopulationStatistics",
        "summary": "List population statistics",
        "description": "Official population on 31 December by sex (table 12411-01-01-5) and average age by sex (12411-07-01-5) since 2008. Each record is one series: a measure from one table with an optional breakdown (e.g. sex) and its values per period. Search statistic, measure and breakdown labels. Values are published figures under DL-DE-BY-2.0; null values carry the official GENESIS sign in marker (\"-\", \".\", \"...\", \"x\" or \"/\"); signs are never converted to numbers. Gold files are refreshed by a reviewed pipeline.\n\nExample request: `GET /api/v1/schleswig/population?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PopulationStatisticsPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-population",
                        "title": "Population of Schleswig",
                        "description": "Official population on 31 December by sex and average age by sex, from the Regionaldatenbank Deutschland.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": "2025-12-31",
                          "sourcePublishedAt": null,
                          "sourceUpdatedAt": null,
                          "retrievedAt": "2026-10-21T14:38:53.960Z",
                          "curatedAt": "2026-10-21T14:38:53.960Z"
                        },
                        "source": {
                          "provider": "Regionaldatenbank Deutschland",
                          "publisher": "Statistische Ämter des Bundes und der Länder",
                          "catalog": null,
                          "url": "https://www.regionalstatistik.de/genesis/online",
                          "downloadUrl": null,
                          "format": "ffcsv via GENESIS REST API (https://www.regionalstatistik.de/genesisws/rest/2020/data/tablefile)"
                        },
                        "license": {
                          "id": "DL-DE-BY-2.0",
                          "url": "https://www.govdata.de/dl-de/by-2-0",
                          "attribution": "© Statistische Ämter des Bundes und der Länder, Deutschland, 2026. Datenlizenz Deutschland – Namensnennung – Version 2.0. Tabellen: 12411-01-01-5, 12411-07-01-5."
                        },
                        "temporalCoverage": {
                          "years": [
                            2008,
                            2009,
                            2010,
                            2011,
                            2012,
                            2013,
                            2014,
                            2015,
                            2016,
                            2017,
                            2018,
                            2019,
                            2020,
                            2021,
                            2022,
                            2023,
                            2024,
                            2025
                          ]
                        },
                        "processing": {
                          "steps": [
                            "Downloaded tables 12411-01-01-5, 12411-07-01-5 as flat-file CSV, filtered by the source to GEMEIN 01059075 from 2008.",
                            "Grouped rows into one series per table, measure and breakdown; sorted values by period.",
                            "Converted decimal commas to numbers; kept official signs for missing values in marker and mapped \"-\" (exactly zero) to 0.",
                            "Translated field names into English; German labels, units and codes are unchanged."
                          ]
                        },
                        "recordCount": 6
                      },
                      "data": [
                        {
                          "id": "12411-01-01-5.BEVSTD.GESM",
                          "table": {
                            "code": "12411-01-01-5",
                            "statistic": "Fortschreibung des Bevölkerungsstandes"
                          },
                          "measure": {
                            "code": "BEVSTD",
                            "label": "Bevölkerungsstand"
                          },
                          "unit": "Anzahl",
                          "breakdown": [
                            {
                              "variable": "GES",
                              "variableLabel": "Geschlecht",
                              "code": "GESM",
                              "label": "männlich"
                            }
                          ],
                          "values": [
                            {
                              "period": "2008-12-31",
                              "value": 11430,
                              "marker": null
                            },
                            {
                              "period": "2009-12-31",
                              "value": 11458,
                              "marker": null
                            },
                            {
                              "period": "2010-12-31",
                              "value": 11471,
                              "marker": null
                            },
                            {
                              "period": "2011-12-31",
                              "value": 11461,
                              "marker": null
                            },
                            {
                              "period": "2012-12-31",
                              "value": 11377,
                              "marker": null
                            },
                            {
                              "period": "2013-12-31",
                              "value": 11350,
                              "marker": null
                            },
                            {
                              "period": "2014-12-31",
                              "value": 11614,
                              "marker": null
                            },
                            {
                              "period": "2015-12-31",
                              "value": 11807,
                              "marker": null
                            },
                            {
                              "period": "2016-12-31",
                              "value": 12071,
                              "marker": null
                            },
                            {
                              "period": "2017-12-31",
                              "value": 12250,
                              "marker": null
                            },
                            {
                              "period": "2018-12-31",
                              "value": 12294,
                              "marker": null
                            },
                            {
                              "period": "2019-12-31",
                              "value": 12370,
                              "marker": null
                            },
                            {
                              "period": "2020-12-31",
                              "value": 12312,
                              "marker": null
                            },
                            {
                              "period": "2021-12-31",
                              "value": 12365,
                              "marker": null
                            },
                            {
                              "period": "2022-12-31",
                              "value": 12172,
                              "marker": null
                            },
                            {
                              "period": "2023-12-31",
                              "value": 12285,
                              "marker": null
                            },
                            {
                              "period": "2024-12-31",
                              "value": 12395,
                              "marker": null
                            },
                            {
                              "period": "2025-12-31",
                              "value": 12499,
                              "marker": null
                            }
                          ]
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 6,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Population counts are stocks on 31 December (period YYYY-12-31); average age is in years.",
                        "Official statistics from the Regionaldatenbank Deutschland as published; values are not adjusted by this project. Series may contain methodological breaks; see metadata.source.",
                        "A null value carries the official sign in marker: \"-\" nothing (also used where a measure is no longer collected, so it is not converted to 0), \".\" confidential or unknown, \"...\" not yet available, \"x\" not meaningful, \"/\" not reliable enough.",
                        "Each record is one series: id is <table>.<measure>.<breakdown codes>; TOTAL marks the total over a breakdown. q searches statistic, measure and breakdown labels."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/population-movement": {
      "get": {
        "operationId": "listPopulationMovement",
        "summary": "List births, deaths and migration",
        "description": "Official annual live births (12612-01-01-5) and deaths (12613-01-01-5) by sex, and moves into and out of Schleswig across municipal borders (12711-91-01-5), since 2008. Each record is one series: a measure from one table with an optional breakdown (e.g. sex) and its values per period. Search statistic, measure and breakdown labels. Values are published figures under DL-DE-BY-2.0; null values carry the official GENESIS sign in marker (\"-\", \".\", \"...\", \"x\" or \"/\"); signs are never converted to numbers. Gold files are refreshed by a reviewed pipeline.\n\nExample request: `GET /api/v1/schleswig/population-movement?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PopulationMovementPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-population-movement",
                        "title": "Births, Deaths and Migration in Schleswig",
                        "description": "Official annual live births and deaths by sex, and moves into and out of Schleswig across municipal borders, from the Regionaldatenbank Deutschland.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": "2025-12-31",
                          "sourcePublishedAt": null,
                          "sourceUpdatedAt": null,
                          "retrievedAt": "2026-10-21T14:38:53.960Z",
                          "curatedAt": "2026-10-21T14:38:53.960Z"
                        },
                        "source": {
                          "provider": "Regionaldatenbank Deutschland",
                          "publisher": "Statistische Ämter des Bundes und der Länder",
                          "catalog": null,
                          "url": "https://www.regionalstatistik.de/genesis/online",
                          "downloadUrl": null,
                          "format": "ffcsv via GENESIS REST API (https://www.regionalstatistik.de/genesisws/rest/2020/data/tablefile)"
                        },
                        "license": {
                          "id": "DL-DE-BY-2.0",
                          "url": "https://www.govdata.de/dl-de/by-2-0",
                          "attribution": "© Statistische Ämter des Bundes und der Länder, Deutschland, 2026. Datenlizenz Deutschland – Namensnennung – Version 2.0. Tabellen: 12612-01-01-5, 12613-01-01-5, 12711-91-01-5."
                        },
                        "temporalCoverage": {
                          "years": [
                            2008,
                            2009,
                            2010,
                            2011,
                            2012,
                            2013,
                            2014,
                            2015,
                            2016,
                            2017,
                            2018,
                            2019,
                            2020,
                            2021,
                            2022,
                            2023,
                            2024,
                            2025
                          ]
                        },
                        "processing": {
                          "steps": [
                            "Downloaded tables 12612-01-01-5, 12613-01-01-5, 12711-91-01-5 as flat-file CSV, filtered by the source to GEMEIN 01059075 from 2008.",
                            "Grouped rows into one series per table, measure and breakdown; sorted values by period.",
                            "Converted decimal commas to numbers; kept official signs for missing values in marker and mapped \"-\" (exactly zero) to 0.",
                            "Translated field names into English; German labels, units and codes are unchanged."
                          ]
                        },
                        "recordCount": 8
                      },
                      "data": [
                        {
                          "id": "12612-01-01-5.BEV001.GESM",
                          "table": {
                            "code": "12612-01-01-5",
                            "statistic": "Statistik der Geburten"
                          },
                          "measure": {
                            "code": "BEV001",
                            "label": "Lebendgeborene"
                          },
                          "unit": "Anzahl",
                          "breakdown": [
                            {
                              "variable": "GES",
                              "variableLabel": "Geschlecht",
                              "code": "GESM",
                              "label": "männlich"
                            }
                          ],
                          "values": [
                            {
                              "period": "2008",
                              "value": 98,
                              "marker": null
                            },
                            {
                              "period": "2009",
                              "value": 111,
                              "marker": null
                            },
                            {
                              "period": "2010",
                              "value": 99,
                              "marker": null
                            },
                            {
                              "period": "2011",
                              "value": 94,
                              "marker": null
                            },
                            {
                              "period": "2012",
                              "value": 79,
                              "marker": null
                            },
                            {
                              "period": "2013",
                              "value": 92,
                              "marker": null
                            },
                            {
                              "period": "2014",
                              "value": 94,
                              "marker": null
                            },
                            {
                              "period": "2015",
                              "value": 112,
                              "marker": null
                            },
                            {
                              "period": "2016",
                              "value": 116,
                              "marker": null
                            },
                            {
                              "period": "2017",
                              "value": 130,
                              "marker": null
                            },
                            {
                              "period": "2018",
                              "value": 120,
                              "marker": null
                            },
                            {
                              "period": "2019",
                              "value": 108,
                              "marker": null
                            },
                            {
                              "period": "2020",
                              "value": 92,
                              "marker": null
                            },
                            {
                              "period": "2021",
                              "value": 107,
                              "marker": null
                            },
                            {
                              "period": "2022",
                              "value": 95,
                              "marker": null
                            },
                            {
                              "period": "2023",
                              "value": 88,
                              "marker": null
                            },
                            {
                              "period": "2024",
                              "value": 95,
                              "marker": null
                            }
                          ]
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 8,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Births, deaths and moves are annual sums (period YYYY). Moves count crossings of the municipal border, not net migration.",
                        "Official statistics from the Regionaldatenbank Deutschland as published; values are not adjusted by this project. Series may contain methodological breaks; see metadata.source.",
                        "A null value carries the official sign in marker: \"-\" nothing (also used where a measure is no longer collected, so it is not converted to 0), \".\" confidential or unknown, \"...\" not yet available, \"x\" not meaningful, \"/\" not reliable enough.",
                        "Each record is one series: id is <table>.<measure>.<breakdown codes>; TOTAL marks the total over a breakdown. q searches statistic, measure and breakdown labels."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/construction": {
      "get": {
        "operationId": "listConstruction",
        "summary": "List residential construction statistics",
        "description": "Official annual permits (31111-01-02-5) and completions (31121-01-02-5) of new residential buildings: buildings and dwellings by building size, and living space, since 2008. Each record is one series: a measure from one table with an optional breakdown (e.g. sex) and its values per period. Search statistic, measure and breakdown labels. Values are published figures under DL-DE-BY-2.0; null values carry the official GENESIS sign in marker (\"-\", \".\", \"...\", \"x\" or \"/\"); signs are never converted to numbers. Gold files are refreshed by a reviewed pipeline.\n\nExample request: `GET /api/v1/schleswig/construction?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConstructionPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-construction",
                        "title": "Residential Construction in Schleswig",
                        "description": "Official annual building permits and completions for new residential buildings: buildings, dwellings and living space, from the Regionaldatenbank Deutschland.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": "2024-12-31",
                          "sourcePublishedAt": null,
                          "sourceUpdatedAt": null,
                          "retrievedAt": "2026-10-21T14:45:17.013Z",
                          "curatedAt": "2026-10-21T14:45:17.013Z"
                        },
                        "source": {
                          "provider": "Regionaldatenbank Deutschland",
                          "publisher": "Statistische Ämter des Bundes und der Länder",
                          "catalog": null,
                          "url": "https://www.regionalstatistik.de/genesis/online",
                          "downloadUrl": null,
                          "format": "ffcsv via GENESIS REST API (https://www.regionalstatistik.de/genesisws/rest/2020/data/tablefile)"
                        },
                        "license": {
                          "id": "DL-DE-BY-2.0",
                          "url": "https://www.govdata.de/dl-de/by-2-0",
                          "attribution": "© Statistische Ämter des Bundes und der Länder, Deutschland, 2026. Datenlizenz Deutschland – Namensnennung – Version 2.0. Tabellen: 31111-01-02-5, 31121-01-02-5."
                        },
                        "temporalCoverage": {
                          "years": [
                            2008,
                            2009,
                            2010,
                            2011,
                            2012,
                            2013,
                            2014,
                            2015,
                            2016,
                            2017,
                            2018,
                            2019,
                            2020,
                            2021,
                            2022,
                            2023,
                            2024
                          ]
                        },
                        "processing": {
                          "steps": [
                            "Downloaded tables 31111-01-02-5, 31121-01-02-5 as flat-file CSV, filtered by the source to GEMEIN 01059075 from 2008.",
                            "Grouped rows into one series per table, measure and breakdown; sorted values by period.",
                            "Converted decimal commas to numbers; kept official signs (\"-\", \".\", \"...\", \"x\", \"/\") in marker with a null value.",
                            "Translated field names into English; German labels, units and codes are unchanged."
                          ]
                        },
                        "recordCount": 18
                      },
                      "data": [
                        {
                          "id": "31111-01-02-5.BAU015.BAUGEB01.TOTAL",
                          "table": {
                            "code": "31111-01-02-5",
                            "statistic": "Statistik der Baugenehmigungen"
                          },
                          "measure": {
                            "code": "BAU015",
                            "label": "Gebäude"
                          },
                          "unit": "Anzahl",
                          "breakdown": [
                            {
                              "variable": "BAUF03",
                              "variableLabel": "Gebäudeart - Wohngebäude",
                              "code": "BAUGEB01",
                              "label": "Wohngebäude (inkl. Wohnheime)"
                            },
                            {
                              "variable": "GEBWH1",
                              "variableLabel": "Gebäude nach Anzahl der Wohnungen",
                              "code": null,
                              "label": "Insgesamt"
                            }
                          ],
                          "values": [
                            {
                              "period": "2008",
                              "value": 29,
                              "marker": null
                            },
                            {
                              "period": "2009",
                              "value": 14,
                              "marker": null
                            },
                            {
                              "period": "2010",
                              "value": 55,
                              "marker": null
                            },
                            {
                              "period": "2011",
                              "value": 54,
                              "marker": null
                            },
                            {
                              "period": "2012",
                              "value": 75,
                              "marker": null
                            },
                            {
                              "period": "2013",
                              "value": 96,
                              "marker": null
                            },
                            {
                              "period": "2014",
                              "value": 41,
                              "marker": null
                            },
                            {
                              "period": "2015",
                              "value": 88,
                              "marker": null
                            },
                            {
                              "period": "2016",
                              "value": 90,
                              "marker": null
                            },
                            {
                              "period": "2017",
                              "value": 50,
                              "marker": null
                            },
                            {
                              "period": "2018",
                              "value": 66,
                              "marker": null
                            },
                            {
                              "period": "2019",
                              "value": 38,
                              "marker": null
                            },
                            {
                              "period": "2020",
                              "value": 30,
                              "marker": null
                            },
                            {
                              "period": "2021",
                              "value": 38,
                              "marker": null
                            },
                            {
                              "period": "2022",
                              "value": 25,
                              "marker": null
                            },
                            {
                              "period": "2023",
                              "value": 14,
                              "marker": null
                            },
                            {
                              "period": "2024",
                              "value": 28,
                              "marker": null
                            }
                          ]
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 18,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Annual sums of permits and completions for new residential buildings; living space is in 1,000 m².",
                        "Official statistics from the Regionaldatenbank Deutschland as published; values are not adjusted by this project. Series may contain methodological breaks; see metadata.source.",
                        "A null value carries the official sign in marker: \"-\" nothing (also used where a measure is no longer collected, so it is not converted to 0), \".\" confidential or unknown, \"...\" not yet available, \"x\" not meaningful, \"/\" not reliable enough.",
                        "Each record is one series: id is <table>.<measure>.<breakdown codes>; TOTAL marks the total over a breakdown. q searches statistic, measure and breakdown labels."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/tourism": {
      "get": {
        "operationId": "listTourism",
        "summary": "List tourism statistics",
        "description": "Official annual accommodation statistics (45412-01-02-5): open establishments, beds, guest arrivals and overnight stays, since 2008. Covers establishments above the survey threshold only. Each record is one series: a measure from one table with an optional breakdown (e.g. sex) and its values per period. Search statistic, measure and breakdown labels. Values are published figures under DL-DE-BY-2.0; null values carry the official GENESIS sign in marker (\"-\", \".\", \"...\", \"x\" or \"/\"); signs are never converted to numbers. Gold files are refreshed by a reviewed pipeline.\n\nExample request: `GET /api/v1/schleswig/tourism?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TourismPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-tourism",
                        "title": "Tourism in Schleswig",
                        "description": "Official annual accommodation statistics: open establishments, beds, guest arrivals and overnight stays, from the Regionaldatenbank Deutschland.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": "2025-12-31",
                          "sourcePublishedAt": null,
                          "sourceUpdatedAt": null,
                          "retrievedAt": "2026-10-21T14:45:17.013Z",
                          "curatedAt": "2026-10-21T14:45:17.013Z"
                        },
                        "source": {
                          "provider": "Regionaldatenbank Deutschland",
                          "publisher": "Statistische Ämter des Bundes und der Länder",
                          "catalog": null,
                          "url": "https://www.regionalstatistik.de/genesis/online",
                          "downloadUrl": null,
                          "format": "ffcsv via GENESIS REST API (https://www.regionalstatistik.de/genesisws/rest/2020/data/tablefile)"
                        },
                        "license": {
                          "id": "DL-DE-BY-2.0",
                          "url": "https://www.govdata.de/dl-de/by-2-0",
                          "attribution": "© Statistische Ämter des Bundes und der Länder, Deutschland, 2026. Datenlizenz Deutschland – Namensnennung – Version 2.0. Tabellen: 45412-01-02-5."
                        },
                        "temporalCoverage": {
                          "years": [
                            2008,
                            2009,
                            2010,
                            2011,
                            2012,
                            2013,
                            2014,
                            2015,
                            2016,
                            2017,
                            2018,
                            2019,
                            2020,
                            2021,
                            2022,
                            2023,
                            2024,
                            2025
                          ]
                        },
                        "processing": {
                          "steps": [
                            "Downloaded tables 45412-01-02-5 as flat-file CSV, filtered by the source to GEMEIN 01059075 from 2008.",
                            "Grouped rows into one series per table, measure and breakdown; sorted values by period.",
                            "Converted decimal commas to numbers; kept official signs (\"-\", \".\", \"...\", \"x\", \"/\") in marker with a null value.",
                            "Translated field names into English; German labels, units and codes are unchanged."
                          ]
                        },
                        "recordCount": 4
                      },
                      "data": [
                        {
                          "id": "45412-01-02-5.GAST01",
                          "table": {
                            "code": "45412-01-02-5",
                            "statistic": "Monatserhebung im Tourismus"
                          },
                          "measure": {
                            "code": "GAST01",
                            "label": "Gästeankünfte"
                          },
                          "unit": "Anzahl",
                          "breakdown": [],
                          "values": [
                            {
                              "period": "2008",
                              "value": 50739,
                              "marker": null
                            },
                            {
                              "period": "2009",
                              "value": 45525,
                              "marker": null
                            },
                            {
                              "period": "2010",
                              "value": 48106,
                              "marker": null
                            },
                            {
                              "period": "2011",
                              "value": 49480,
                              "marker": null
                            },
                            {
                              "period": "2012",
                              "value": 52008,
                              "marker": null
                            },
                            {
                              "period": "2013",
                              "value": 53014,
                              "marker": null
                            },
                            {
                              "period": "2014",
                              "value": 54309,
                              "marker": null
                            },
                            {
                              "period": "2015",
                              "value": 57933,
                              "marker": null
                            },
                            {
                              "period": "2016",
                              "value": 58833,
                              "marker": null
                            },
                            {
                              "period": "2017",
                              "value": 59963,
                              "marker": null
                            },
                            {
                              "period": "2018",
                              "value": 63092,
                              "marker": null
                            },
                            {
                              "period": "2019",
                              "value": 64308,
                              "marker": null
                            },
                            {
                              "period": "2020",
                              "value": 36320,
                              "marker": null
                            },
                            {
                              "period": "2021",
                              "value": 41955,
                              "marker": null
                            },
                            {
                              "period": "2022",
                              "value": 54895,
                              "marker": null
                            },
                            {
                              "period": "2023",
                              "value": 56210,
                              "marker": null
                            },
                            {
                              "period": "2024",
                              "value": 55874,
                              "marker": null
                            },
                            {
                              "period": "2025",
                              "value": 67112,
                              "marker": null
                            }
                          ]
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 4,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Annual sums from the monthly accommodation survey; it covers establishments above the survey threshold, not all private rentals. Beds (GAST03) are marked \"-\" since 2018 because this table no longer reports them.",
                        "Official statistics from the Regionaldatenbank Deutschland as published; values are not adjusted by this project. Series may contain methodological breaks; see metadata.source.",
                        "A null value carries the official sign in marker: \"-\" nothing (also used where a measure is no longer collected, so it is not converted to 0), \".\" confidential or unknown, \"...\" not yet available, \"x\" not meaningful, \"/\" not reliable enough.",
                        "Each record is one series: id is <table>.<measure>.<breakdown codes>; TOTAL marks the total over a breakdown. q searches statistic, measure and breakdown labels."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/schleswig/municipal-taxes": {
      "get": {
        "operationId": "listMunicipalTaxes",
        "summary": "List municipal tax statistics",
        "description": "Official annual local tax rates (Hebesätze) for property tax A and B and business tax, tax revenue and municipal shares of income and turnover tax (71231-01-03-5), since 2016. Each record is one series: a measure from one table with an optional breakdown (e.g. sex) and its values per period. Search statistic, measure and breakdown labels. Values are published figures under DL-DE-BY-2.0; null values carry the official GENESIS sign in marker (\"-\", \".\", \"...\", \"x\" or \"/\"); signs are never converted to numbers. Gold files are refreshed by a reviewed pipeline.\n\nExample request: `GET /api/v1/schleswig/municipal-taxes?limit=1&offset=0`. Lists default to 20 records (maximum 100). Follow pagination.nextOffset until null. Source order is stable within a snapshot, but can change after an update. Unknown or repeated parameters are rejected; empty strings are invalid. Metadata describes the full snapshot, not this page.",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "Exact, case-sensitive record ID as a string (1–100 characters after trimming). Combined with q using AND.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Case-insensitive substring search (1–200 characters after trimming); searched fields are documented per endpoint. No wildcard syntax.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size, 1–100; default 20. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Zero-based offset in the filtered list; default 0, at most 9007199254740991. Supply decimal digits only.",
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "default": 0,
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "example": 0
          }
        ],
        "responses": {
          "200": {
            "description": "A page of records with complete dataset metadata, source attribution and notices. An unmatched filter or out-of-range offset returns an empty data array with HTTP 200.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                },
                "description": "Instructs HTTP clients and intermediaries not to store the response."
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MunicipalTaxesPage"
                },
                "examples": {
                  "sample": {
                    "summary": "First record from the packaged snapshot (limit=1)",
                    "value": {
                      "metadata": {
                        "id": "schleswig-municipal-taxes",
                        "title": "Municipal Taxes of Schleswig",
                        "description": "Official annual local business and property tax rates (Hebesätze), tax revenue and municipal shares of income and turnover tax, from the Regionaldatenbank Deutschland.",
                        "schemaVersion": "1.0.0",
                        "language": "de",
                        "municipality": {
                          "name": "Schleswig",
                          "ags": "01059075"
                        },
                        "dates": {
                          "dataAsOf": "2024-12-31",
                          "sourcePublishedAt": null,
                          "sourceUpdatedAt": null,
                          "retrievedAt": "2026-10-21T14:38:53.960Z",
                          "curatedAt": "2026-10-21T14:38:53.960Z"
                        },
                        "source": {
                          "provider": "Regionaldatenbank Deutschland",
                          "publisher": "Statistische Ämter des Bundes und der Länder",
                          "catalog": null,
                          "url": "https://www.regionalstatistik.de/genesis/online",
                          "downloadUrl": null,
                          "format": "ffcsv via GENESIS REST API (https://www.regionalstatistik.de/genesisws/rest/2020/data/tablefile)"
                        },
                        "license": {
                          "id": "DL-DE-BY-2.0",
                          "url": "https://www.govdata.de/dl-de/by-2-0",
                          "attribution": "© Statistische Ämter des Bundes und der Länder, Deutschland, 2026. Datenlizenz Deutschland – Namensnennung – Version 2.0. Tabellen: 71231-01-03-5."
                        },
                        "temporalCoverage": {
                          "years": [
                            2016,
                            2017,
                            2018,
                            2019,
                            2020,
                            2021,
                            2022,
                            2023,
                            2024
                          ]
                        },
                        "processing": {
                          "steps": [
                            "Downloaded tables 71231-01-03-5 as flat-file CSV, filtered by the source to GEMEIN 01059075 from 2008.",
                            "Grouped rows into one series per table, measure and breakdown; sorted values by period.",
                            "Converted decimal commas to numbers; kept official signs for missing values in marker and mapped \"-\" (exactly zero) to 0.",
                            "Translated field names into English; German labels, units and codes are unchanged."
                          ]
                        },
                        "recordCount": 15
                      },
                      "data": [
                        {
                          "id": "71231-01-03-5.STNW01",
                          "table": {
                            "code": "71231-01-03-5",
                            "statistic": "Realsteuervergleich"
                          },
                          "measure": {
                            "code": "STNW01",
                            "label": "Grundsteuer A IST-Aufkommen"
                          },
                          "unit": "EUR",
                          "breakdown": [],
                          "values": [
                            {
                              "period": "2016",
                              "value": 12700,
                              "marker": null
                            },
                            {
                              "period": "2017",
                              "value": 11208,
                              "marker": null
                            },
                            {
                              "period": "2018",
                              "value": 12648,
                              "marker": null
                            },
                            {
                              "period": "2019",
                              "value": 11457,
                              "marker": null
                            },
                            {
                              "period": "2020",
                              "value": 12075,
                              "marker": null
                            },
                            {
                              "period": "2021",
                              "value": 10580,
                              "marker": null
                            },
                            {
                              "period": "2022",
                              "value": 11044,
                              "marker": null
                            },
                            {
                              "period": "2023",
                              "value": 10946,
                              "marker": null
                            },
                            {
                              "period": "2024",
                              "value": 11137,
                              "marker": null
                            }
                          ]
                        }
                      ],
                      "pagination": {
                        "offset": 0,
                        "limit": 1,
                        "total": 15,
                        "returned": 1,
                        "nextOffset": 1
                      },
                      "notices": [
                        "Annual values; tax rates (Hebesätze) are percentages, amounts are euros.",
                        "Official statistics from the Regionaldatenbank Deutschland as published; values are not adjusted by this project. Series may contain methodological breaks; see metadata.source.",
                        "A null value carries the official sign in marker: \"-\" nothing (also used where a measure is no longer collected, so it is not converted to 0), \".\" confidential or unknown, \"...\" not yet available, \"x\" not meaningful, \"/\" not reliable enough.",
                        "Each record is one series: id is <table>.<measure>.<breakdown codes>; TOTAL marks the total over a breakdown. q searches statistic, measure and breakdown labels."
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "BAD_REQUEST",
                    "message": "Invalid query parameters. Use id, q, limit (1-100), and offset (0 or greater) for dataset lists; water-level accepts none."
                  }
                }
              }
            }
          },
          "403": {
            "description": "Host or Origin is not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "FORBIDDEN",
                    "message": "Host or Origin is not allowed."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Route not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "NOT_FOUND",
                    "message": "Route not found."
                  }
                }
              }
            }
          },
          "405": {
            "description": "Use GET for this endpoint.",
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string",
                  "const": "GET"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "METHOD_NOT_ALLOWED",
                    "message": "Use GET for this endpoint."
                  }
                }
              }
            }
          },
          "500": {
            "description": "An unexpected error occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "INTERNAL_ERROR",
                    "message": "An unexpected error occurred."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Prepared dataset missing, unavailable or invalid (DATA_NOT_FOUND, SOURCE_UNAVAILABLE or INVALID_SOURCE_DATA).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "DATA_NOT_FOUND",
                    "message": "The prepared dataset is missing."
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "error"
        ],
        "additionalProperties": false
      },
      "WaterLevel": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "station": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "const": "09370c05-1041-4395-a5d4-b8db6e59c4c8"
              },
              "number": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "water": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "number",
              "name",
              "water"
            ],
            "additionalProperties": false
          },
          "measurement": {
            "type": "object",
            "properties": {
              "value": {
                "type": "number"
              },
              "unit": {
                "type": "string",
                "const": "cm"
              },
              "timestamp": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "reference": {
                "type": "string",
                "const": "gauge_zero"
              }
            },
            "required": [
              "value",
              "unit",
              "timestamp",
              "reference"
            ],
            "additionalProperties": false
          },
          "freshness": {
            "type": "object",
            "properties": {
              "fetchedAt": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
              },
              "ageSeconds": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "isStale": {
                "type": "boolean"
              },
              "staleAfterSeconds": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "fetchedAt",
              "ageSeconds",
              "isStale",
              "staleAfterSeconds"
            ],
            "additionalProperties": false
          },
          "source": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "const": "PEGELONLINE"
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "license": {
                "type": "string",
                "const": "DL-DE-Zero-2.0"
              },
              "licenseUrl": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "name",
              "url",
              "license",
              "licenseUrl"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "station",
          "measurement",
          "freshness",
          "source",
          "notices"
        ],
        "additionalProperties": false
      },
      "WaterLevelHistoryPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                },
                "date": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                },
                "unit": {
                  "type": "string",
                  "const": "cm"
                },
                "reference": {
                  "type": "string",
                  "const": "gauge_zero"
                },
                "minimum": {
                  "type": "number"
                },
                "mean": {
                  "type": "number"
                },
                "maximum": {
                  "type": "number"
                },
                "measurementCount": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 1500
                }
              },
              "required": [
                "id",
                "date",
                "unit",
                "reference",
                "minimum",
                "mean",
                "maximum",
                "measurementCount"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "AddressPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[A-Za-z0-9]{16}$"
                },
                "street": {
                  "type": "string",
                  "minLength": 1
                },
                "streetCode": {
                  "type": "string",
                  "pattern": "^[A-Za-z0-9]{5}$"
                },
                "houseNumber": {
                  "type": "string",
                  "pattern": "^\\d+$"
                },
                "addressExtra": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "postalCode": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^\\d{5}$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "latitude": {
                  "type": "number",
                  "minimum": -90,
                  "maximum": 90
                },
                "longitude": {
                  "type": "number",
                  "minimum": -180,
                  "maximum": 180
                }
              },
              "required": [
                "id",
                "street",
                "streetCode",
                "houseNumber",
                "addressExtra",
                "postalCode",
                "latitude",
                "longitude"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "MonumentPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^\\d+$"
                },
                "name": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "type": "string"
                },
                "heritageType": {
                  "type": "string",
                  "minLength": 1
                },
                "municipality": {
                  "type": "string",
                  "const": "Schleswig, Stadt"
                },
                "district": {
                  "type": "string",
                  "const": "Kreis Schleswig-Flensburg"
                },
                "addressLocation": {
                  "type": "string"
                },
                "protectionScope": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "protectionReason": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "photoURL": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "id",
                "name",
                "description",
                "heritageType",
                "municipality",
                "district"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "BathingWaterPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^DESH_PR_\\d+$"
                },
                "name": {
                  "type": "string",
                  "minLength": 1
                },
                "waterCategory": {
                  "type": "string",
                  "minLength": 1
                },
                "coastalSea": {
                  "type": "string"
                },
                "bathingWaterType": {
                  "type": "string"
                },
                "additionalDescription": {
                  "type": "string"
                },
                "euRegistrationDate": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                },
                "euDeregistrationDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "riverBasinDistrictId": {
                  "type": "string"
                },
                "riverBasinDistrictName": {
                  "type": "string"
                },
                "waterBodyId": {
                  "type": "string"
                },
                "waterBodyName": {
                  "type": "string"
                },
                "keywords": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "districtCode": {
                  "type": "string",
                  "const": "59"
                },
                "districtName": {
                  "type": "string",
                  "const": "Schleswig-Flensburg"
                },
                "municipalityCode": {
                  "type": "string",
                  "const": "075"
                },
                "municipalityName": {
                  "type": "string",
                  "const": "Schleswig, Stadt"
                },
                "utmEasting": {
                  "type": "number",
                  "minimum": 100000,
                  "maximum": 999999
                },
                "utmNorthing": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 10000000
                },
                "longitude": {
                  "type": "number",
                  "minimum": -180,
                  "maximum": 180
                },
                "latitude": {
                  "type": "number",
                  "minimum": -90,
                  "maximum": 90
                },
                "bathingSiteInformation": {
                  "type": "string"
                },
                "impactAssessment": {
                  "type": "string"
                },
                "potentialPollutionSources": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "id",
                "name",
                "waterCategory",
                "coastalSea",
                "bathingWaterType",
                "additionalDescription",
                "euRegistrationDate",
                "euDeregistrationDate",
                "riverBasinDistrictId",
                "riverBasinDistrictName",
                "waterBodyId",
                "waterBodyName",
                "keywords",
                "districtCode",
                "districtName",
                "municipalityCode",
                "municipalityName",
                "utmEasting",
                "utmNorthing",
                "longitude",
                "latitude",
                "bathingSiteInformation",
                "impactAssessment",
                "potentialPollutionSources"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "ChargingStationPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^\\d+$"
                },
                "operator": {
                  "type": "string",
                  "minLength": 1
                },
                "displayName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "status": {
                  "type": "string",
                  "minLength": 1
                },
                "stationType": {
                  "type": "string",
                  "minLength": 1
                },
                "chargingPointCount": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "ratedPowerKw": {
                  "type": "number",
                  "exclusiveMinimum": 0
                },
                "commissionedAt": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                },
                "address": {
                  "type": "object",
                  "properties": {
                    "street": {
                      "type": "string",
                      "minLength": 1
                    },
                    "houseNumber": {
                      "type": "string"
                    },
                    "addressSuffix": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "postalCode": {
                      "type": "string",
                      "const": "24837"
                    },
                    "city": {
                      "type": "string",
                      "const": "Schleswig"
                    }
                  },
                  "required": [
                    "street",
                    "houseNumber",
                    "addressSuffix",
                    "postalCode",
                    "city"
                  ],
                  "additionalProperties": false
                },
                "coordinates": {
                  "type": "object",
                  "properties": {
                    "latitude": {
                      "type": "number",
                      "minimum": -90,
                      "maximum": 90
                    },
                    "longitude": {
                      "type": "number",
                      "minimum": -180,
                      "maximum": 180
                    }
                  },
                  "required": [
                    "latitude",
                    "longitude"
                  ],
                  "additionalProperties": false
                },
                "locationName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "parkingInformation": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "paymentMethods": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "openingHours": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "chargingPoints": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "position": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "connectors": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "connectorType": {
                              "type": "string",
                              "minLength": 1
                            },
                            "ratedPowerKw": {
                              "type": "number",
                              "exclusiveMinimum": 0
                            }
                          },
                          "required": [
                            "connectorType",
                            "ratedPowerKw"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "evseId": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "publicKey": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "position",
                      "connectors",
                      "evseId",
                      "publicKey"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "operator",
                "displayName",
                "status",
                "stationType",
                "chargingPointCount",
                "ratedPowerKw",
                "commissionedAt",
                "address",
                "coordinates",
                "locationName",
                "parkingInformation",
                "paymentMethods",
                "openingHours",
                "chargingPoints"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "PopulationPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^\\d+$"
                },
                "name": {
                  "type": "string",
                  "minLength": 1
                },
                "unit": {
                  "type": "string",
                  "minLength": 1
                },
                "explanation": {
                  "type": "string"
                },
                "calculation": {
                  "type": "string"
                },
                "source": {
                  "type": "string"
                },
                "values": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "year": {
                        "type": "integer",
                        "minimum": 1900,
                        "maximum": 2200
                      },
                      "value": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "year",
                      "value"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "name",
                "unit",
                "explanation",
                "calculation",
                "source",
                "values"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "PopulationStatisticsPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[0-9A-Za-z.-]+$"
                },
                "table": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "pattern": "^\\d{5}-\\d{2}-\\d{2}-5$"
                    },
                    "statistic": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "statistic"
                  ],
                  "additionalProperties": false
                },
                "measure": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "label": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "label"
                  ],
                  "additionalProperties": false
                },
                "unit": {
                  "type": "string",
                  "minLength": 1
                },
                "breakdown": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "variable": {
                        "type": "string",
                        "minLength": 1
                      },
                      "variableLabel": {
                        "type": "string",
                        "minLength": 1
                      },
                      "code": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "label": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    "required": [
                      "variable",
                      "variableLabel",
                      "code",
                      "label"
                    ],
                    "additionalProperties": false
                  }
                },
                "values": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "period": {
                        "type": "string",
                        "pattern": "^\\d{4}(-\\d{2}-\\d{2})?$"
                      },
                      "value": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "marker": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "period",
                      "value",
                      "marker"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "table",
                "measure",
                "unit",
                "breakdown",
                "values"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "PopulationMovementPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[0-9A-Za-z.-]+$"
                },
                "table": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "pattern": "^\\d{5}-\\d{2}-\\d{2}-5$"
                    },
                    "statistic": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "statistic"
                  ],
                  "additionalProperties": false
                },
                "measure": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "label": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "label"
                  ],
                  "additionalProperties": false
                },
                "unit": {
                  "type": "string",
                  "minLength": 1
                },
                "breakdown": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "variable": {
                        "type": "string",
                        "minLength": 1
                      },
                      "variableLabel": {
                        "type": "string",
                        "minLength": 1
                      },
                      "code": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "label": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    "required": [
                      "variable",
                      "variableLabel",
                      "code",
                      "label"
                    ],
                    "additionalProperties": false
                  }
                },
                "values": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "period": {
                        "type": "string",
                        "pattern": "^\\d{4}(-\\d{2}-\\d{2})?$"
                      },
                      "value": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "marker": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "period",
                      "value",
                      "marker"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "table",
                "measure",
                "unit",
                "breakdown",
                "values"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "ConstructionPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[0-9A-Za-z.-]+$"
                },
                "table": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "pattern": "^\\d{5}-\\d{2}-\\d{2}-5$"
                    },
                    "statistic": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "statistic"
                  ],
                  "additionalProperties": false
                },
                "measure": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "label": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "label"
                  ],
                  "additionalProperties": false
                },
                "unit": {
                  "type": "string",
                  "minLength": 1
                },
                "breakdown": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "variable": {
                        "type": "string",
                        "minLength": 1
                      },
                      "variableLabel": {
                        "type": "string",
                        "minLength": 1
                      },
                      "code": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "label": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    "required": [
                      "variable",
                      "variableLabel",
                      "code",
                      "label"
                    ],
                    "additionalProperties": false
                  }
                },
                "values": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "period": {
                        "type": "string",
                        "pattern": "^\\d{4}(-\\d{2}-\\d{2})?$"
                      },
                      "value": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "marker": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "period",
                      "value",
                      "marker"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "table",
                "measure",
                "unit",
                "breakdown",
                "values"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "TourismPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[0-9A-Za-z.-]+$"
                },
                "table": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "pattern": "^\\d{5}-\\d{2}-\\d{2}-5$"
                    },
                    "statistic": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "statistic"
                  ],
                  "additionalProperties": false
                },
                "measure": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "label": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "label"
                  ],
                  "additionalProperties": false
                },
                "unit": {
                  "type": "string",
                  "minLength": 1
                },
                "breakdown": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "variable": {
                        "type": "string",
                        "minLength": 1
                      },
                      "variableLabel": {
                        "type": "string",
                        "minLength": 1
                      },
                      "code": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "label": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    "required": [
                      "variable",
                      "variableLabel",
                      "code",
                      "label"
                    ],
                    "additionalProperties": false
                  }
                },
                "values": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "period": {
                        "type": "string",
                        "pattern": "^\\d{4}(-\\d{2}-\\d{2})?$"
                      },
                      "value": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "marker": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "period",
                      "value",
                      "marker"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "table",
                "measure",
                "unit",
                "breakdown",
                "values"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      },
      "MunicipalTaxesPage": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^schleswig-[a-z-]+$"
              },
              "title": {
                "type": "string",
                "minLength": 1
              },
              "description": {
                "type": "string",
                "minLength": 1
              },
              "schemaVersion": {
                "type": "string",
                "const": "1.0.0"
              },
              "language": {
                "type": "string",
                "const": "de"
              },
              "municipality": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "const": "Schleswig"
                  },
                  "ags": {
                    "type": "string",
                    "const": "01059075"
                  }
                },
                "required": [
                  "name",
                  "ags"
                ],
                "additionalProperties": false
              },
              "dates": {
                "type": "object",
                "properties": {
                  "dataAsOf": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourcePublishedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sourceUpdatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "retrievedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "curatedAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "dataAsOf",
                  "sourcePublishedAt",
                  "sourceUpdatedAt",
                  "retrievedAt",
                  "curatedAt"
                ],
                "additionalProperties": false
              },
              "source": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "minLength": 1
                  },
                  "publisher": {
                    "type": "string",
                    "minLength": 1
                  },
                  "catalog": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "downloadUrl": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "format": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "provider",
                  "publisher",
                  "catalog",
                  "url",
                  "downloadUrl",
                  "format"
                ],
                "additionalProperties": false
              },
              "license": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "enum": [
                      "CC-BY-4.0",
                      "CC0-1.0",
                      "DL-DE-BY-2.0",
                      "DL-DE-Zero-2.0"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "attribution": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "id",
                  "url",
                  "attribution"
                ],
                "additionalProperties": false
              },
              "coordinateReferenceSystem": {
                "type": "string",
                "const": "EPSG:4326"
              },
              "projectedCoordinates": {
                "type": "object",
                "properties": {
                  "fields": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "const": "utmEasting"
                      },
                      {
                        "type": "string",
                        "const": "utmNorthing"
                      }
                    ],
                    "items": {
                      "not": {}
                    },
                    "minItems": 2
                  },
                  "sourceDeclaredCrs": {
                    "type": "string",
                    "const": "EPSG:4647"
                  },
                  "note": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "required": [
                  "fields",
                  "sourceDeclaredCrs",
                  "note"
                ],
                "additionalProperties": false
              },
              "temporalCoverage": {
                "type": "object",
                "properties": {
                  "years": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "minimum": 1900,
                      "maximum": 2200
                    }
                  }
                },
                "required": [
                  "years"
                ],
                "additionalProperties": false
              },
              "processing": {
                "type": "object",
                "properties": {
                  "steps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1
                    }
                  }
                },
                "required": [
                  "steps"
                ],
                "additionalProperties": false
              },
              "recordCount": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id",
              "title",
              "description",
              "schemaVersion",
              "language",
              "municipality",
              "dates",
              "source",
              "license",
              "processing",
              "recordCount"
            ],
            "additionalProperties": false
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[0-9A-Za-z.-]+$"
                },
                "table": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "pattern": "^\\d{5}-\\d{2}-\\d{2}-5$"
                    },
                    "statistic": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "statistic"
                  ],
                  "additionalProperties": false
                },
                "measure": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "label": {
                      "type": "string",
                      "minLength": 1
                    }
                  },
                  "required": [
                    "code",
                    "label"
                  ],
                  "additionalProperties": false
                },
                "unit": {
                  "type": "string",
                  "minLength": 1
                },
                "breakdown": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "variable": {
                        "type": "string",
                        "minLength": 1
                      },
                      "variableLabel": {
                        "type": "string",
                        "minLength": 1
                      },
                      "code": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "label": {
                        "type": "string",
                        "minLength": 1
                      }
                    },
                    "required": [
                      "variable",
                      "variableLabel",
                      "code",
                      "label"
                    ],
                    "additionalProperties": false
                  }
                },
                "values": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "period": {
                        "type": "string",
                        "pattern": "^\\d{4}(-\\d{2}-\\d{2})?$"
                      },
                      "value": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "marker": {
                        "anyOf": [
                          {
                            "type": "string",
                            "minLength": 1
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "period",
                      "value",
                      "marker"
                    ],
                    "additionalProperties": false
                  }
                }
              },
              "required": [
                "id",
                "table",
                "measure",
                "unit",
                "breakdown",
                "values"
              ],
              "additionalProperties": false
            }
          },
          "pagination": {
            "type": "object",
            "properties": {
              "offset": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "returned": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "nextOffset": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "offset",
              "limit",
              "total",
              "returned",
              "nextOffset"
            ],
            "additionalProperties": false
          },
          "notices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "metadata",
          "data",
          "pagination",
          "notices"
        ],
        "additionalProperties": false
      }
    }
  }
}
