{
  "openapi": "3.0.3",
  "info": {
    "title": "Goudappel Mobility Twin API",
    "version": "0.3.0",
    "description": "This API delivers information about mobility, so you can create your insights\n  using e.g. digital twins. It complies with the OGC API - Features Core (https://www.ogc.org/standard/ogcapi-features, https://github.com/opengeospatial/ogcapi-features) and uses a OGC API - Styles to implement the styles (https://ogcapi.ogc.org/styles/)\n",
    "contact": {
      "name": "Dat.mobility",
      "url": "https://dat.nl",
      "email": "support@dat.nl"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
    }
  },
  "tags": [
    {
      "name": "Authentication",
      "description": "endpoints to facilitate JWT process"
    },
    {
      "name": "Common",
      "description": "essential characteristics of this API [OGC API - Common](https://docs.ogc.org/is/19-072/19-072.htm)"
    },
    {
      "name": "Features",
      "description": "access to data (features) [OGC API - Features](https://docs.ogc.org/is/17-069r4/17-069r4.html)"
    },
    {
      "name": "Processes",
      "description": "supported processes, [OGC API - Processes](https://docs.ogc.org/is/18-062r2/18-062r2.html)"
    }
  ],
  "servers": [
    {
      "url": "http://localhost:8080/"
    }
  ],
  "paths": {
    "/": {
      "get": {
        "tags": [
          "Common"
        ],
        "summary": "landing page",
        "description": "The landing page provides links to the API definition, the conformance statements and to the feature collections in this dataset.",
        "operationId": "getLandingPage",
        "security": [
          {
            "openData": []
          }
        ],
        "responses": {
          "200": {
            "description": "The landing page provides links to the API definition (link relations `service-desc` and `service-doc`),\n            the Conformance declaration (path `/conformance`, link relation `conformance`), and the Feature\n            Collections (path `/collections`, link relation `data`).\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/landingPage"
                },
                "example": {
                  "title": "GMT",
                  "description": "This API delivers information about mobility, so you can create your insights using e.g. digital twins.",
                  "links": [
                    {
                      "href": "http://data.example.org/",
                      "rel": "self",
                      "type": "application/json",
                      "title": "this document"
                    },
                    {
                      "href": "http://data.example.org/api",
                      "rel": "service-desc",
                      "type": "application/vnd.oai.openapi+json;version=3.0",
                      "title": "the API definition"
                    },
                    {
                      "href": "http://data.example.org/api.html",
                      "rel": "service-doc",
                      "type": "text/html",
                      "title": "the API documentation"
                    },
                    {
                      "href": "http://data.example.org/conformance",
                      "rel": "conformance",
                      "type": "application/json",
                      "title": "OGC API conformance classes implemented by this server"
                    },
                    {
                      "href": "http://data.example.org/collections",
                      "rel": "data",
                      "type": "application/json",
                      "title": "Information about the feature collections"
                    }
                  ]
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/conformance": {
      "get": {
        "tags": [
          "Common"
        ],
        "summary": "information about specifications that this API conforms to",
        "description": "A list of all conformance classes specified in a standard that the\n        server conforms to.\n",
        "operationId": "getConformanceDeclaration",
        "security": [
          {
            "openData": []
          }
        ],
        "responses": {
          "200": {
            "description": "The URIs of all conformance classes supported by the server.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "conformsTo"
                  ],
                  "properties": {
                    "conformsTo": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                },
                "example": {
                  "conformsTo": [
                    "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core",
                    "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30",
                    "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/html",
                    "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson"
                  ]
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/collections": {
      "get": {
        "description": "This describes all available collections in this API\n",
        "tags": [
          "Features"
        ],
        "summary": "the feature collections in the dataset",
        "operationId": "getCollections",
        "security": [
          {
            "openData": []
          }
        ],
        "responses": {
          "200": {
            "description": "The feature collections shared by this API.\n            The dataset is organized as one or more feature collections. This resource provides information about and access to the collections.\n            The response contains the list of collections. For each collection, a link to the items in the collection (path `/collections/{collectionId}/items`,\n            link relation `items`) as well as key information about the collection.\n            This information includes:\n            * A local identifier for the collection that is unique for the dataset;\n            * An optional list of coordinate reference systems (CRS) in which geometries may be returned by the server. The default value is a list with the default CRS (WGS 84 with axis order longitude/latitude).\n            * An optional title and description for the collection;\n            * An optional extent that can be used to provide an indication of the spatial and temporal extent of the collection - typically derived from the data;\n            * An optional indicator about the type of the items in the collection (the default value, if the indicator is not provided, is 'feature').\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/collections"
                },
                "example": {
                  "links": [
                    {
                      "href": "http://data.example.org/collections.json",
                      "rel": "self",
                      "type": "application/json",
                      "title": "this document"
                    },
                    {
                      "href": "http://data.example.org/collections.html",
                      "rel": "alternate",
                      "type": "text/html",
                      "title": "this document as HTML"
                    },
                    {
                      "href": "http://schemas.example.org/1.0/buildings.xsd",
                      "rel": "describedby",
                      "type": "application/xml",
                      "title": "GML application schema for Acme Corporation building data"
                    },
                    {
                      "href": "http://download.example.org/buildings.gpkg",
                      "rel": "enclosure",
                      "type": "application/geopackage+sqlite3",
                      "title": "Bulk download (GeoPackage)",
                      "length": 472546
                    }
                  ],
                  "collections": [
                    {
                      "id": "buildings",
                      "title": "Buildings",
                      "description": "Buildings in the city of Bonn.",
                      "extent": {
                        "spatial": {
                          "bbox": [
                            [
                              7.01,
                              50.63,
                              7.22,
                              50.78
                            ]
                          ]
                        },
                        "temporal": {
                          "interval": [
                            [
                              "2010-02-15T12:34:56Z",
                              null
                            ]
                          ]
                        }
                      },
                      "links": [
                        {
                          "href": "http://data.example.org/collections/buildings/items",
                          "rel": "items",
                          "type": "application/geo+json",
                          "title": "Buildings"
                        },
                        {
                          "href": "http://data.example.org/collections/buildings/items.html",
                          "rel": "items",
                          "type": "text/html",
                          "title": "Buildings"
                        },
                        {
                          "href": "https://creativecommons.org/publicdomain/zero/1.0/",
                          "rel": "license",
                          "type": "text/html",
                          "title": "CC0-1.0"
                        },
                        {
                          "href": "https://creativecommons.org/publicdomain/zero/1.0/rdf",
                          "rel": "license",
                          "type": "application/rdf+xml",
                          "title": "CC0-1.0"
                        }
                      ]
                    }
                  ]
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/collections/segments": {
      "get": {
        "summary": "return meta description of the segments",
        "description": "this returns a description of the segments",
        "operationId": "metaSegments",
        "security": [
          {
            "openData": []
          }
        ],
        "tags": [
          "Features"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/f"
          }
        ],
        "responses": {
          "200": {
            "description": "meta data about segments",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/collection"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/collections/segments/items": {
      "get": {
        "summary": "return all segments, including values.",
        "description": "this returns all segments in an area, requested data for each segment is added in the properties.",
        "operationId": "segmentData",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "tags": [
          "Features"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/areaId"
          },
          {
            "$ref": "#/components/parameters/mode"
          },
          {
            "$ref": "#/components/parameters/date"
          },
          {
            "$ref": "#/components/parameters/temperature"
          },
          {
            "$ref": "#/components/parameters/weather"
          },
          {
            "$ref": "#/components/parameters/purpose"
          },
          {
            "$ref": "#/components/parameters/bbox"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/limit"
          }
        ],
        "responses": {
          "200": {
            "description": "the values per segment",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/geojson"
                    },
                    {
                      "$ref": "#/components/schemas/summary"
                    }
                  ]
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "default": "public, max-age=10000"
                },
                "description": "Resource is fairly persistent and has a medium time to live to allow short-term caching.\n"
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/processes": {
      "get": {
        "tags": [
          "Processes"
        ],
        "summary": "retrieve the list of available processes",
        "description": "The list of processes contains a summary of each process the OGC API - Processes offers, including the link to a more detailed description of the process.\n\nFor more information, see [Section 7.9](https://docs.ogc.org/is/18-062/18-062.html#sc_process_list).\n",
        "operationId": "getProcesses",
        "security": [
          {
            "openData": []
          }
        ],
        "responses": {
          "200": {
            "description": "Information about the available processes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/processList"
                }
              }
            }
          }
        }
      }
    },
    "/processes/intersect-area": {
      "get": {
        "tags": [
          "Processes"
        ],
        "operationId": "getIntersectAreaDescription",
        "description": "process to create an intersection from the mobility network(s) of the Netherlands (Spectrum (R) Goudappel). \n        Required pre-processing step for most other methods.\n",
        "security": [
          {
            "openData": []
          }
        ],
        "responses": {
          "200": {
            "description": "A process description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/intersectAreaProcess"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/processes/intersect-area/execution": {
      "post": {
        "summary": "create an area",
        "description": "this operation allows to create an intersection from the map of the Netherlands. The returned area-id must be used in all collections.",
        "operationId": "createArea",
        "security": [
          {
            "bearerAuth": [
              "create"
            ]
          }
        ],
        "tags": [
          "Processes"
        ],
        "requestBody": {
          "description": "information to make an area intersection",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/areaIntersectionRequest"
                  },
                  "subscriber": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "an ID that can be used to refer to the area",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/areaProperties"
                    },
                    {
                      "type": "object",
                      "required": [
                        "jobId"
                      ],
                      "properties": {
                        "jobId": {
                          "type": "string"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        },
        "callbacks": {
          "jobCompleted": {
            "{$request.body#/subscriber/successUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "someOf": [
                          {
                            "$ref": "#/components/schemas/geojson"
                          },
                          {
                            "$ref": "#/components/schemas/process"
                          }
                        ]
                      }
                    }
                  }
                },
                "responses": {
                  "204": {
                    "description": "Results received successfully"
                  }
                }
              }
            }
          },
          "jobInProgress": {
            "{$request.body#/subscriber/inProgressUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "type": "object",
                        "required": [
                          "jobId",
                          "progress"
                        ],
                        "properties": {
                          "jobId": {
                            "type": "string"
                          },
                          "progress": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 100
                          },
                          "message": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                },
                "responses": {
                  "204": {
                    "description": "Acknowledged"
                  }
                }
              }
            }
          },
          "jobInError": {
            "{$request.body#/subscriber/failedUri}": {
              "post": {
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/problem"
                      }
                    }
                  }
                },
                "responses": {
                  "204": {
                    "description": "Acknowledged"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/processes/remove-area": {
      "get": {
        "tags": [
          "Processes"
        ],
        "operationId": "getRemoveAreaDescription",
        "description": "remove a registered area.",
        "security": [
          {
            "openData": []
          }
        ],
        "responses": {
          "200": {
            "description": "A process description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/removeAreaProcess"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/processes/remove-area/execution": {
      "post": {
        "summary": "delete an area",
        "description": "this removes a previously created area.",
        "operationId": "deleteArea",
        "security": [
          {
            "bearerAuth": [
              "create"
            ]
          }
        ],
        "tags": [
          "Processes"
        ],
        "requestBody": {
          "description": "information to remove an area",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/areaRemovalRequest"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "a succesfull removal of the area",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/processes/adjust-capacity": {
      "get": {
        "tags": [
          "Processes"
        ],
        "summary": "get process detail of 'adjust-capacity'",
        "description": "adjust the capacity on several road segments in a network (area)",
        "operationId": "getAdjustCapacityDescription",
        "security": [
          {
            "openData": []
          }
        ],
        "responses": {
          "200": {
            "description": "A process description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/adjustCapacityProcess"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/processes/adjust-capacity/execution": {
      "post": {
        "summary": "adjust the capacity on a segment",
        "description": "this operation allows manipulate the network or other objects, and returns another, new area-id",
        "operationId": "adjustCapicity",
        "security": [
          {
            "bearerAuth": [
              "actions"
            ]
          }
        ],
        "tags": [
          "Processes"
        ],
        "requestBody": {
          "description": "adjust the capacity on segments",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "inputs"
                ],
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/adjustCapacityRequest"
                  },
                  "subscribers": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "responds the jobId",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/areaProperties"
                    },
                    {
                      "type": "object",
                      "required": [
                        "jobId"
                      ],
                      "properties": {
                        "jobId": {
                          "type": "string"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/processes/recalculate-flows": {
      "get": {
        "tags": [
          "Processes"
        ],
        "summary": "get process detail of 'recalculate-flows'",
        "operationId": "getRecalculateFlowsDescription",
        "description": "recalculate the flows after applying adjustments",
        "security": [
          {
            "openData": []
          }
        ],
        "responses": {
          "200": {
            "description": "A process description.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/recalculateFlowsProcess"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/processes/recalculate-flows/execution": {
      "post": {
        "summary": "recalculate all flows, produce a new area",
        "operationId": "recalculate-flows",
        "security": [
          {
            "bearerAuth": [
              "actions"
            ]
          }
        ],
        "tags": [
          "Processes"
        ],
        "requestBody": {
          "description": "specify the source area",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "inputs"
                ],
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/recalculateFlowsRequest"
                  },
                  "subscribers": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "responds the jobId",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/areaProperties"
                    },
                    {
                      "type": "object",
                      "required": [
                        "jobId"
                      ],
                      "properties": {
                        "jobId": {
                          "type": "string"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/processes/locate-hubs/execution": {
      "post": {
        "summary": "calculate locations for hubs",
        "operationId": "locate-hubs",
        "security": [
          {
            "bearerAuth": [
              "actions"
            ]
          }
        ],
        "tags": [
          "Processes"
        ],
        "requestBody": {
          "description": "specify the attributes to calculate the locations",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/locateHubsRequest"
                  },
                  "subscribers": {
                    "$ref": "#/components/schemas/subscriber"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "responds the jobId",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "jobId": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/processes/calculate-emissions/execution": {
      "post": {
        "summary": "calculate emissions on a network",
        "operationId": "calculate-emissions",
        "security": [
          {
            "bearerAuth": [
              "actions"
            ]
          }
        ],
        "tags": [
          "Processes"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "inputs": {
                    "$ref": "#/components/schemas/geojson"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "responds the geojson with emissions per segment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/geojson"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/jobs/{jobId}": {
      "get": {
        "summary": "request the status of a job",
        "operationId": "statusData",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "tags": [
          "Processes"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/jobId"
          }
        ],
        "responses": {
          "200": {
            "description": "the status of the specified job (= areaId)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/statusOverview"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "default": "public, max-age=10000"
                },
                "description": "Resource is fairly persistent and has a medium time to live to allow short-term caching.\n"
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/jobs/{jobId}/results": {
      "get": {
        "summary": "return all segments, including values.",
        "description": "this returns all segments in an area, requested data for each segment \n        is added in the properties.\n",
        "operationId": "getJobResults",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "tags": [
          "Processes"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/jobId"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/limit"
          }
        ],
        "responses": {
          "200": {
            "description": "the values per segment",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/geojson"
                    },
                    {
                      "$ref": "#/components/schemas/summary"
                    }
                  ]
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "default": "public, max-age=10000"
                },
                "description": "Resource is fairly persistent and has a medium time to live to allow short-term caching.\n"
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/capabilities": {
      "get": {
        "operationId": "requestCapabilities",
        "parameters": [
          {
            "$ref": "#/components/parameters/date"
          }
        ],
        "tags": [
          "Authentication"
        ],
        "summary": "data spaces capabilities check",
        "security": [
          {
            "openData": []
          }
        ],
        "description": "data space compliancy",
        "responses": {
          "200": {
            "description": "the capabilities of an API, see also https://dev.ishare.eu/ishare-satellite-role/capabilities",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/capabilitiesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/connect/token": {
      "post": {
        "operationId": "postConnectToken",
        "summary": "Request an access token",
        "description": "request an JWT token to use in a dataspace context",
        "security": [
          {
            "openData": []
          }
        ],
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/accessTokenRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "in case of a valid request, a accessTokenResponse",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/accessTokenResponse"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    },
    "/authenticate": {
      "post": {
        "summary": "request JWT token",
        "operationId": "oAuth2Token",
        "security": [
          {
            "openData": []
          }
        ],
        "tags": [
          "Authentication"
        ],
        "requestBody": {
          "description": "authenticationDetails",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "responds the token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "token": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/defaultErrorResponse"
          }
        }
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "openData": {
        "type": "http",
        "description": "this data set is open. If it is one of the options, it is up to the\n        implementing party whether it is open or not.\n",
        "scheme": "none"
      }
    },
    "parameters": {
      "jobId": {
        "name": "jobId",
        "in": "path",
        "schema": {
          "type": "string"
        },
        "required": true
      },
      "areaId": {
        "name": "areaId",
        "description": "this id is used in most request, and it will be cross-checked with\n        the identification of the requesting part, if it is allowed to access the area.\n",
        "in": "query",
        "schema": {
          "type": "string"
        },
        "required": true,
        "style": "form",
        "explode": false
      },
      "f": {
        "name": "f",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": [
            "json",
            "html"
          ]
        },
        "required": false,
        "style": "form",
        "explode": false
      },
      "mode": {
        "name": "mode",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/mode"
        },
        "required": true,
        "style": "form",
        "explode": false
      },
      "purpose": {
        "name": "purpose",
        "description": "this is the reason why the trip has been made.",
        "in": "query",
        "schema": {
          "$ref": "#/components/schemas/purpose"
        },
        "required": false,
        "style": "form",
        "explode": false
      },
      "temperature": {
        "name": "temperature",
        "description": "a temperature-indictation, dependend of the area, how people interpret the temperature",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": [
            "high",
            "medium",
            "low"
          ],
          "default": "medium"
        },
        "required": false,
        "style": "form",
        "explode": false
      },
      "weather": {
        "name": "weather",
        "description": "the weather condition that's used to adjust the flows. E.g. bikes and pedestrians\n        do have a different movement pattern when it rains compared to the sunny scenarios.\n",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": [
            "sunny",
            "cloudy",
            "dry",
            "rainy"
          ],
          "default": "cloudy"
        },
        "required": false,
        "style": "form",
        "explode": false
      },
      "date": {
        "name": "date",
        "description": "a specific moment in time, it is based on hours, so requesting \n        something at 12:00 or 12:05 will have the samen result (for now). In the \n        future, we will narrow down this time window.\n",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "$(timestamp)",
          "example": "12-01-2025T14:00:00.00Z"
        },
        "required": false,
        "style": "form",
        "explode": false
      },
      "bbox": {
        "name": "bbox",
        "in": "query",
        "description": "Only features that have a geometry that intersects the bounding box are selected.\n        The bounding box is provided as four or six numbers, depending on whether the\n        coordinate reference system includes a vertical axis (height or depth):\n        * Lower left corner, coordinate axis 1\n        * Lower left corner, coordinate axis 2\n        * Minimum value, coordinate axis 3 (optional)\n        * Upper right corner, coordinate axis 1\n        * Upper right corner, coordinate axis 2\n        * Maximum value, coordinate axis 3 (optional)\n        If the value consists of four numbers, the coordinate reference system is\n        WGS 84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84)\n        unless a different coordinate reference system is specified in the parameter `bbox-crs`.\n        If the value consists of six numbers, the coordinate reference system is WGS 84 \n        longitude/latitude/ellipsoidal height (http://www.opengis.net/def/crs/OGC/0/CRS84h)\n        unless a different coordinate reference system is specified in the parameter `bbox-crs`.\n        The query parameter `bbox-crs` is specified in OGC API - Features - Part 2: Coordinate \n        Reference Systems by Reference.\n        For WGS 84 longitude/latitude the values are in most cases the sequence of\n        minimum longitude, minimum latitude, maximum longitude and maximum latitude.\n        However, in cases where the box spans the antimeridian the first value\n        (west-most box edge) is larger than the third or fourth value (east-most box edge).\n        If the vertical axis is included, the third and the sixth number are\n        the bottom and the top of the 3-dimensional bounding box.\n        If a feature has multiple spatial geometry properties, it is the decision of the\n        server whether only a single spatial geometry property is used to determine\n        the extent or all relevant geometries.\n",
        "required": false,
        "schema": {
          "type": "array",
          "oneOf": [
            {
              "minItems": 4,
              "maxItems": 4
            },
            {
              "minItems": 6,
              "maxItems": 6
            }
          ],
          "items": {
            "type": "number"
          }
        },
        "style": "form",
        "explode": false
      },
      "limit": {
        "name": "limit",
        "in": "query",
        "description": "The optional limit parameter limits the number of items that are presented in the response document.\n        Only items are counted that are on the first level of the collection in the response document.\n        Nested objects contained within the explicitly requested items shall not be counted.\n        Minimum = 1. Maximum = 10000. Default = 100.\n",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 10000,
          "default": 100
        },
        "style": "form",
        "explode": false
      },
      "offset": {
        "name": "offset",
        "in": "query",
        "description": "The optional offset parameter offsets the number of items that are presented in the response document.\n        Only items are counted that are on the first level of the collection in the response document.\n        Nested objects contained within the explicitly requested items shall not be counted.\n        Minimum = 0. Default = 0.\n",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 0,
          "default": 0
        },
        "style": "form",
        "explode": false
      }
    },
    "responses": {
      "defaultErrorResponse": {
        "description": "default error response\n",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/problem"
            }
          },
          "text/html": {
            "schema": {
              "type": "string"
            }
          }
        }
      }
    },
    "schemas": {
      "collections": {
        "type": "object",
        "required": [
          "links",
          "collections"
        ],
        "properties": {
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/collection"
            }
          }
        }
      },
      "collection": {
        "type": "object",
        "required": [
          "id",
          "links"
        ],
        "properties": {
          "id": {
            "description": "identifier of the collection used, for example, in URIs",
            "type": "string",
            "example": "address"
          },
          "title": {
            "description": "human readable title of the collection",
            "type": "string",
            "example": "address"
          },
          "description": {
            "description": "a description of the features in the collection",
            "type": "string",
            "example": "An address."
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            },
            "example": [
              {
                "href": "http://data.example.com/buildings",
                "rel": "item"
              },
              {
                "href": "http://example.com/concepts/buildings.html",
                "rel": "describedby",
                "type": "text/html"
              }
            ]
          },
          "linkTemplates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/linkTemplate"
            }
          },
          "extent": {
            "$ref": "#/components/schemas/extent"
          },
          "itemType": {
            "description": "indicator about the type of the items in the collection (the default value is 'feature').",
            "type": "string",
            "default": "feature"
          },
          "crs": {
            "description": "the list of coordinate reference systems supported by the service",
            "type": "array",
            "items": {
              "type": "string"
            },
            "default": [
              "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
            ],
            "example": [
              "http://www.opengis.net/def/crs/OGC/1.3/CRS84",
              "http://www.opengis.net/def/crs/EPSG/0/4326"
            ]
          }
        }
      },
      "landingPage": {
        "type": "object",
        "required": [
          "links"
        ],
        "properties": {
          "title": {
            "type": "string",
            "example": "Buildings in Bonn"
          },
          "description": {
            "type": "string",
            "example": "Access to data about buildings in the city of Bonn via a Web API that conforms to the OGC API Features specification."
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "link": {
        "type": "object",
        "required": [
          "href",
          "rel"
        ],
        "properties": {
          "href": {
            "type": "string"
          },
          "rel": {
            "type": "string",
            "example": "alternate"
          },
          "type": {
            "type": "string",
            "example": "application/geo+json"
          },
          "hreflang": {
            "type": "string",
            "example": "en"
          },
          "title": {
            "type": "string",
            "example": "Trierer Strasse 70, 53115 Bonn"
          },
          "length": {
            "type": "integer"
          },
          "method": {
            "type": "string",
            "enum": [
              "POST",
              "GET",
              "DELETE",
              "PATCH"
            ]
          },
          "body": {
            "type": "object"
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "linkTemplate": {
        "type": "object",
        "required": [
          "uriTemplate",
          "rel"
        ],
        "properties": {
          "uriTemplate": {
            "type": "string",
            "example": "https://data.example.org/collections/buildings/items/{featureId}"
          },
          "rel": {
            "type": "string"
          },
          "title": {
            "type": "string",
            "example": "Link template for building features"
          },
          "type": {
            "type": "string",
            "example": "application/geo+json"
          },
          "varBase": {
            "type": "string"
          }
        }
      },
      "extent": {
        "type": "object",
        "description": "The extent of the features in the collection. In the Core only spatial and temporal\n        extents are specified. Extensions may add additional members to represent other\n        extents, for example, thermal or pressure ranges.\n",
        "properties": {
          "spatial": {
            "description": "The spatial extent of the features in the collection.\n",
            "type": "object",
            "properties": {
              "bbox": {
                "description": "One or more bounding boxes that describe the spatial extent of the dataset.\n                In the Core only a single bounding box is supported. Extensions may support\n                additional areas. If multiple areas are provided, the union of the bounding\n                boxes describes the spatial extent.\n",
                "type": "array",
                "minItems": 1,
                "items": {
                  "description": "Each bounding box is provided as four or six numbers, depending on\n                  whether the coordinate reference system includes a vertical axis\n                  (height or depth):\n                  * Lower left corner, coordinate axis 1\n                  * Lower left corner, coordinate axis 2\n                  * Minimum value, coordinate axis 3 (optional)\n                  * Upper right corner, coordinate axis 1\n                  * Upper right corner, coordinate axis 2\n                  * Maximum value, coordinate axis 3 (optional)\n                  The coordinate reference system of the values is WGS 84 longitude/latitude\n                  (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate\n                  reference system is specified in `crs`.\n                  For WGS 84 longitude/latitude the values are in most cases the sequence of\n                  minimum longitude, minimum latitude, maximum longitude and maximum latitude.\n                  However, in cases where the box spans the antimeridian the first value\n                  (west-most box edge) is larger than the third or fourth value (east-most box edge).\n                  If the vertical axis is included, the third and the sixth number are\n                  the bottom and the top of the 3-dimensional bounding box.\n                  If a feature has multiple spatial geometry properties, it is the decision of the\n                  server whether only a single spatial geometry property is used to determine\n                  the extent or all relevant geometries.\n",
                  "type": "array",
                  "oneOf": [
                    {
                      "minItems": 4,
                      "maxItems": 4
                    },
                    {
                      "minItems": 6,
                      "maxItems": 6
                    }
                  ],
                  "items": {
                    "type": "number"
                  },
                  "example": [
                    -180,
                    -90,
                    180,
                    90
                  ]
                }
              },
              "crs": {
                "description": "Coordinate reference system of the coordinates in the spatial extent\n                (property `bbox`). The default reference system is WGS 84 longitude/latitude.\n                In the Core this is the only supported coordinate reference system.\n                Extensions may support additional coordinate reference systems and add\n                additional enum values.\n",
                "type": "string",
                "enum": [
                  "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
                ],
                "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
              }
            }
          },
          "temporal": {
            "description": "The temporal extent of the features in the collection.\n",
            "type": "object",
            "properties": {
              "interval": {
                "description": "One or more time intervals that describe the temporal extent of the dataset.\n                The value `null` is supported and indicates an unbounded interval end.\n                In the Core only a single time interval is supported. Extensions may support\n                multiple intervals. If multiple intervals are provided, the union of the\n                intervals describes the temporal extent.\n",
                "type": "array",
                "minItems": 1,
                "items": {
                  "description": "Begin and end times of the time interval. The timestamps are in the\n                  temporal coordinate reference system specified in `trs`. By default\n                  this is the Gregorian calendar.\n",
                  "type": "array",
                  "minItems": 2,
                  "maxItems": 2,
                  "items": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true
                  },
                  "example": [
                    "2011-11-11T12:22:11Z",
                    null
                  ]
                }
              },
              "trs": {
                "description": "Coordinate reference system of the coordinates in the temporal extent\n                (property `interval`). The default reference system is the Gregorian calendar.\n                In the Core this is the only supported temporal coordinate reference system.\n                Extensions may support additional temporal coordinate reference systems and add\n                additional enum values.\n",
                "type": "string",
                "enum": [
                  "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
                ],
                "default": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
              }
            }
          }
        }
      },
      "summary": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "properties": {
            "type": "object",
            "properties": {
              "areaId": {
                "type": "string",
                "title": "identifier of the area ",
                "description": "a unique string to represent an intersected area."
              },
              "mode": {
                "$ref": "#/components/schemas/mode"
              },
              "valueTypes": {
                "type": "string"
              },
              "purpose": {
                "$ref": "#/components/schemas/purpose"
              },
              "date": {
                "type": "string"
              }
            }
          }
        }
      },
      "subscriber": {
        "description": "Optional URIs for callbacks for this job.\n        Support for this parameter is not required and the parameter may be\n        removed from the API definition, if conformance class **'callback'**\n        is not listed in the conformance declaration under `/conformance`.\n",
        "type": "object",
        "required": [
          "successUrl"
        ],
        "properties": {
          "successUri": {
            "type": "string",
            "title": "the uri that will be called when the process has finished in a successful state",
            "format": "uri"
          },
          "inProgressUri": {
            "type": "string",
            "format": "uri"
          },
          "failedUri": {
            "type": "string",
            "title": "the uri that will be called when the process has finished in an error-state",
            "format": "uri"
          }
        }
      },
      "processOutput": {
        "type": "object",
        "properties": {
          "jobId": {
            "title": "job identifier",
            "type": "string"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "intersectAreaProcess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/processSummary"
          },
          {
            "type": "object",
            "properties": {
              "inputs": {
                "$ref": "#/components/schemas/areaIntersectionRequest"
              },
              "outputs": {
                "simple": {
                  "$ref": "#/components/schemas/processOutput"
                }
              }
            }
          }
        ]
      },
      "removeAreaProcess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/processSummary"
          },
          {
            "type": "object",
            "properties": {
              "inputs": {
                "$ref": "#/components/schemas/areaRemovalRequest"
              },
              "outputs": {
                "simple": {
                  "$ref": "#/components/schemas/processOutput"
                }
              }
            }
          }
        ]
      },
      "adjustCapacityProcess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/processSummary"
          },
          {
            "type": "object",
            "properties": {
              "inputs": {
                "$ref": "#/components/schemas/adjustCapacityRequest"
              },
              "outputs": {
                "simple": {
                  "$ref": "#/components/schemas/processOutput"
                }
              }
            }
          }
        ]
      },
      "recalculateFlowsProcess": {
        "allOf": [
          {
            "$ref": "#/components/schemas/processSummary"
          },
          {
            "type": "object",
            "properties": {
              "inputs": {
                "$ref": "#/components/schemas/recalculateFlowsRequest"
              },
              "outputs": {
                "simple": {
                  "$ref": "#/components/schemas/processOutput"
                }
              }
            }
          }
        ]
      },
      "processList": {
        "required": [
          "links",
          "processes"
        ],
        "type": "object",
        "properties": {
          "processes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/processSummary"
            }
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "process": {
        "allOf": [
          {
            "$ref": "#/components/schemas/processSummary"
          },
          {
            "type": "object",
            "properties": {
              "inputs": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/inputDescription"
                }
              },
              "outputs": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/outputDescription"
                }
              }
            }
          }
        ]
      },
      "processSummary": {
        "allOf": [
          {
            "$ref": "#/components/schemas/descriptionType"
          },
          {
            "required": [
              "id",
              "version"
            ],
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "title": "process identifier"
              },
              "version": {
                "type": "string",
                "title": "version of the process"
              },
              "jobControlOptions": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/jobControlOptions"
                }
              },
              "outputTransmission": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/transmissionMode"
                }
              },
              "links": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/link"
                }
              }
            }
          }
        ]
      },
      "jobControlOptions": {
        "type": "string",
        "enum": [
          "sync-execution",
          "async-execution",
          "dismiss"
        ]
      },
      "transmissionMode": {
        "type": "string",
        "default": "value",
        "enum": [
          "value",
          "reference"
        ]
      },
      "inputDescription": {
        "allOf": [
          {
            "$ref": "#/components/schemas/descriptionType"
          },
          {
            "required": [
              "schema"
            ],
            "type": "object",
            "properties": {
              "minOccurs": {
                "type": "integer",
                "default": 1
              },
              "maxOccurs": {
                "oneOf": [
                  {
                    "type": "integer",
                    "default": 1
                  },
                  {
                    "type": "string",
                    "enum": [
                      "unbounded"
                    ]
                  }
                ]
              },
              "schema": {
                "$ref": "#/components/schemas/schema"
              }
            }
          }
        ]
      },
      "schema": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/reference"
          },
          {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "multipleOf": {
                "minimum": 0,
                "exclusiveMinimum": true,
                "type": "number"
              },
              "maximum": {
                "type": "number"
              },
              "exclusiveMaximum": {
                "type": "boolean",
                "default": false
              },
              "minimum": {
                "type": "number"
              },
              "exclusiveMinimum": {
                "type": "boolean",
                "default": false
              },
              "maxLength": {
                "minimum": 0,
                "type": "integer"
              },
              "minLength": {
                "minimum": 0,
                "type": "integer",
                "default": 0
              },
              "pattern": {
                "type": "string",
                "format": "regex"
              },
              "maxItems": {
                "minimum": 0,
                "type": "integer"
              },
              "minItems": {
                "minimum": 0,
                "type": "integer",
                "default": 0
              },
              "uniqueItems": {
                "type": "boolean",
                "default": false
              },
              "maxProperties": {
                "minimum": 0,
                "type": "integer"
              },
              "minProperties": {
                "minimum": 0,
                "type": "integer",
                "default": 0
              },
              "required": {
                "minItems": 1,
                "uniqueItems": true,
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "enum": {
                "minItems": 1,
                "uniqueItems": false,
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "type": {
                "type": "string",
                "enum": [
                  "array",
                  "boolean",
                  "integer",
                  "number",
                  "object",
                  "string"
                ]
              },
              "not": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/schema"
                  },
                  {
                    "$ref": "#/components/schemas/reference"
                  }
                ]
              },
              "allOf": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/schema"
                    },
                    {
                      "$ref": "#/components/schemas/reference"
                    }
                  ]
                }
              },
              "oneOf": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/schema"
                    },
                    {
                      "$ref": "#/components/schemas/reference"
                    }
                  ]
                }
              },
              "anyOf": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/schema"
                    },
                    {
                      "$ref": "#/components/schemas/reference"
                    }
                  ]
                }
              },
              "items": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/schema"
                  },
                  {
                    "$ref": "#/components/schemas/reference"
                  }
                ]
              },
              "properties": {
                "type": "object",
                "additionalProperties": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/schema"
                    },
                    {
                      "$ref": "#/components/schemas/reference"
                    }
                  ]
                }
              },
              "additionalProperties": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/schema"
                  },
                  {
                    "$ref": "#/components/schemas/reference"
                  },
                  {
                    "type": "boolean"
                  }
                ],
                "default": true
              },
              "description": {
                "type": "string"
              },
              "format": {
                "type": "string"
              },
              "default": {
                "type": "object"
              },
              "nullable": {
                "type": "boolean",
                "default": false
              },
              "readOnly": {
                "type": "boolean",
                "default": false
              },
              "writeOnly": {
                "type": "boolean",
                "default": false
              },
              "example": {
                "type": "object"
              },
              "deprecated": {
                "type": "boolean",
                "default": false
              },
              "contentMediaType": {
                "type": "string"
              },
              "contentEncoding": {
                "type": "string"
              },
              "contentSchema": {
                "type": "string"
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "reference": {
        "required": [
          "$ref"
        ],
        "type": "object",
        "properties": {
          "$ref": {
            "type": "string",
            "format": "uri-reference"
          }
        }
      },
      "descriptionType": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "metadata": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/metadata"
            }
          },
          "additionalParameters": {
            "allOf": [
              {
                "$ref": "#/components/schemas/metadata"
              },
              {
                "type": "object",
                "properties": {
                  "parameters": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/additionalParameter"
                    }
                  }
                }
              }
            ]
          }
        }
      },
      "metadata": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "href": {
            "type": "string"
          }
        }
      },
      "additionalParameter": {
        "required": [
          "name",
          "value"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "value": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                },
                {
                  "type": "object"
                }
              ]
            }
          }
        }
      },
      "outputDescription": {
        "allOf": [
          {
            "$ref": "#/components/schemas/descriptionType"
          },
          {
            "required": [
              "schema"
            ],
            "type": "object",
            "properties": {
              "schema": {
                "$ref": "#/components/schemas/schema"
              }
            }
          }
        ]
      },
      "areaRemovalRequest": {
        "type": "object",
        "required": [
          "areaId"
        ],
        "properties": {
          "areaId": {
            "title": "the identifier of the area to remove",
            "type": "string"
          }
        }
      },
      "areaIntersectionRequest": {
        "type": "object",
        "required": [
          "name",
          "bbox",
          "modes"
        ],
        "properties": {
          "name": {
            "title": "name of the intersection",
            "description": "this name will be used to label the area",
            "type": "string"
          },
          "modes": {
            "type": "array",
            "title": "the networks that are intersected are based on the modes. E.g. 'bicycle'\n            will result in an intersection containing bike lanes.\n",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/mode"
            }
          },
          "bbox": {
            "type": "array",
            "title": "the bounding box to intersect",
            "description": "this bounding box is used to intersect the Spectrum data. It is first\n            intersected with the bounding box that is contractually granted.\n",
            "oneOf": [
              {
                "minItems": 4,
                "maxItems": 4
              },
              {
                "minItems": 6,
                "maxItems": 6
              }
            ],
            "items": {
              "type": "number"
            }
          },
          "crs": {
            "type": "string",
            "format": "uri",
            "default": "http://www.opengis.net/def/crs/OGC/1.3/CRS84",
            "enum": [
              "http://www.opengis.net/def/crs/OGC/1.3/CRS84",
              "http://www.opengis.net/def/crs/OGC/0/CRS84h"
            ]
          },
          "base": {
            "description": "this area is used as base, when missing, the MobiliteitsSpectrum of last year.",
            "type": "string"
          },
          "3d": {
            "type": "boolean",
            "description": "elevate the network (produces 3D geojson)?",
            "default": false
          },
          "lanes": {
            "type": "string",
            "description": "create separate lanes?",
            "default": "no",
            "enum": [
              "yes",
              "no",
              "split"
            ]
          }
        }
      },
      "adjustCapacityRequest": {
        "type": "object",
        "required": [
          "areaId",
          "modes",
          "segments"
        ],
        "properties": {
          "areaId": {
            "title": "the area identifier",
            "description": "the identification of the intersected area",
            "type": "string"
          },
          "modes": {
            "type": "array",
            "title": "the affected network(s) of which mode",
            "description": "the mode(s) that are affected by adjusting the capacity. For now, maxItems = also 1",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/mode"
            }
          },
          "segments": {
            "type": "object",
            "title": "the road segment numbers that are closed down/limited. ",
            "description": "in this object, you specify the new capacity per segment number, in vehicles/hour.",
            "additionalProperties": {
              "type": "number"
            },
            "example": {
              "349234": 0,
              "349235": 100
            }
          },
          "polygons": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "polygon": {
                  "type": "array",
                  "items": {
                    "type": "array",
                    "minItems": 2,
                    "maxItems": 2,
                    "items": {
                      "type": "number"
                    }
                  }
                }
              },
              "additionalProperties": {
                "type": "number",
                "description": "the limited capacity per road max speed"
              },
              "example": {
                "id": "1",
                "polygon": [],
                "30": 50,
                "50": 430
              }
            }
          }
        }
      },
      "recalculateFlowsRequest": {
        "allOf":		[
		                    {
		                      "$ref":  "#/components/schemas/adjustCapacityRequest"
							}
					    ]
        
      },
      "locateHubsRequest": {
        "type": "object",
        "required": [
          "municipality"
        ],
        "properties": {
          "municipality": {
            "type": "string",
            "title": "the city name"
          },
          "potential": {
            "type": "number",
            "default": 14,
            "minimum": 1,
            "maximum": 100
          },
          "clusteringDistance": {
            "type": "number",
            "minimum": 1,
            "default": 300
          },
          "clusteringDistanceLevels": {
            "type": "array",
            "default": [
              2000,
              500,
              300
            ],
            "items": {
              "type": "number",
              "minimum": 1
            }
          },
          "levels": {
            "type": "array",
            "default": [
              "city",
              "neighbourhood",
              "district"
            ],
            "items": {
              "type": "string",
              "enum": [
                "city",
                "neighbourhood",
                "district"
              ]
            }
          }
        }
      },
      "statusOverview": {
        "type": "object",
        "properties": {
          "areaId": {
            "type": "string",
            "title": "identification of the area"
          },
          "mode": {
            "title": "the mode that is used",
            "$ref": "#/components/schemas/mode"
          },
          "status": {
            "title": "the current status of the job",
            "type": "string"
          },
          "jobId": {
            "title": "the job identifier for this job",
            "type": "string"
          },
          "message": {
            "title": "free format textual message",
            "type": "string"
          },
          "progress": {
            "title": "the progress percentage",
            "minimum": 0,
            "maximum": 100,
            "type": "number"
          },
          "created": {
            "type": "string",
            "title": "the timestamp the job is created",
            "format": "$(date-time)"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "featureProperties": {
        "type": "object",
        "description": "the features of a segment in the networkor zone. Can be extended with properties from the 'valueTypes', like 'flow'.",
        "additionalProperties": true,
        "required": [
          "featureId"
        ],
        "properties": {
          "featureId": {
            "type": "string"
          }
        }
      },
      "areaProperties": {
        "type": "object",
        "additionalProperties": true,
        "required": [
          "areaId",
          "mode"
        ],
        "properties": {
          "areaId": {
            "type": "string",
            "title": "the identifier of the intersected area"
          },
          "mode": {
            "title": "the mode (means) of transport",
            "$ref": "#/components/schemas/mode"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "mode": {
        "type": "string",
        "title": "the mode (means) of transport",
        "enum": [
          "BIKE",
          "PEDESTRIAN",
          "CAR",
          "BUS",
          "TRAIN",
          "TRAM",
          "METRO"
        ]
      },
      "LineString": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "type used as discriminator. Therefore not in capitals.",
            "enum": [
              "LineString"
            ]
          },
          "coordinates": {
            "type": "array",
            "items": {
              "type": "array",
              "minItems": 2,
              "maxItems": 2,
              "items": {
                "type": "number"
              }
            },
            "description": "An array  of WGS84 coordinate pairs",
            "externalDocs": {
              "url": "https://geojson.org/geojson-spec.html#line"
            }
          }
        }
      },
      "Polygon": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "type used as discriminator. Therefore not in capitals.",
            "enum": [
              "Polygon"
            ]
          },
          "coordinates": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "array",
                "items": {
                  "type": "number"
                }
              },
              "description": "An array  of WGS84 coordinate pairs"
            },
            "externalDocs": {
              "url": "https://geojson.org/geojson-spec.html#line"
            }
          }
        }
      },
      "geojsonFeature": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "Feature"
            ]
          },
          "geometry": {
            "$ref": "#/components/schemas/LineString"
          },
          "properties": {
            "$ref": "#/components/schemas/featureProperties"
          },
          "id": {
            "type": "string"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "geojson": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "FeatureCollection"
            ]
          },
          "features": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/geojsonFeature"
            }
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "crs": {
            "$ref": "#/components/schemas/crs"
          },
          "timeStamp": {
            "type": "string",
            "format": "date-time"
          },
          "numberMatched": {
            "type": "integer",
            "minimum": 0
          },
          "numberReturned": {
            "type": "integer",
            "minimum": 0
          },
          "properties": {
            "$ref": "#/components/schemas/areaProperties"
          }
        }
      },
      "crs": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "name"
            ]
          },
          "properties": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "enum": [
                  "EPSG:4326"
                ]
              }
            }
          }
        }
      },
      "problem": {
        "type": "object",
        "additionalProperties": false,
        "description": "Problem Details for HTTP APIs (RFC 7807) defines a 'problem detail' as a way\n        to carry machine-readable details of errors in a HTTP response to avoid\n        the need to define new error response formats for HTTP APIs.\n        See: https://tools.ietf.org/html/rfc7807\n",
        "properties": {
          "code": {
            "description": "optional in version 3.1, will be made mandatory in upcoming releases\n",
            "type": "string",
            "nullable": true
          },
          "type": {
            "description": "An absolute URI that identifies the problem type. When dereferenced,\n            it SHOULD provide human-readable documentation for the problem type\n            (e.g., using HTML).\n",
            "type": "string",
            "format": "uri",
            "nullable": true,
            "default": "about:blank"
          },
          "title": {
            "description": "A short, summary of the problem type. Written in English and readable\n            for engineers (usually not suited for non technical stakeholders and\n            not localized);\n",
            "type": "string",
            "nullable": true,
            "example": "Service Unavailable"
          },
          "status": {
            "description": "The HTTP status code generated by the origin server for this occurrence\n            of the problem.\n",
            "type": "integer",
            "format": "int32",
            "minimum": 100,
            "maximum": 599,
            "nullable": true,
            "example": 503
          },
          "detail": {
            "description": "A human readable explanation specific to this occurrence\n            of the problem.\n",
            "type": "string",
            "nullable": true,
            "example": "Connection to database timed out"
          },
          "instance": {
            "description": "An absolute URI that identifies the specific occurrence of the problem.",
            "type": "string",
            "format": "uri",
            "nullable": true
          }
        }
      },
      "purpose": {
        "type": "string",
        "description": "the reason why movements have been performed",
        "enum": [
          "work",
          "education",
          "shopping",
          "recreational",
          "unknown",
          "all"
        ],
        "default": "all"
      },
      "capabilitiesResponse": {
        "type": "object",
        "properties": {
          "capabilities_token": {
            "type": "string"
          }
        }
      },
      "accessTokenRequest": {
        "type": "object",
        "required": [
          "grant_type",
          "scope",
          "client_id",
          "client_assertion_type",
          "client_assertion"
        ],
        "properties": {
          "grant_type": {
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "client_id": {
            "type": "string"
          },
          "client_assertion_type": {
            "type": "string"
          },
          "client_assertion": {
            "type": "string"
          }
        }
      },
      "accessTokenResponse": {
        "type": "object",
        "required": [
          "access_token",
          "token_type",
          "expires_in"
        ],
        "properties": {
          "access_token": {
            "type": "string"
          },
          "token_type": {
            "type": "string"
          },
          "expires_in": {
            "type": "string"
          }
        }
      }
    }
  }
}