{
  "openapi" : "3.0.0",
  "info" : {
    "title" : "MoWeSta Service",
    "description" : "MoWeSta Service Api",
    "termsOfService" : "https://www.nes.uni-due.de",
    "contact" : {
      "name" : "Universität Duisburg-Essen",
      "url" : "https://www.nes.uni-due.de",
      "email" : "marcus.handte@uni-due.de"
    },
    "license" : {
      "name" : "Proprietary",
      "url" : "https://www.nes.uni-due.de"
    },
    "version" : "1.0"
  },
  "servers" : [ {
    "url" : "/api",
    "description" : "Universität Duisburg-Essen"
  } ],
  "paths" : {
    "/devices" : {
      "get" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Gets a device.",
        "operationId" : "getDevices",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Device page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DevicePage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DevicePage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Creates a new device and returns its handle.",
        "description" : "The response will include the auth token to be stored on the device and supplied as authentication on all subsequent api calls. Note that the auth token can not be requested after creation, so when losing the auth token you may lose access to the device data.",
        "operationId" : "createDevice",
        "requestBody" : {
          "description" : "Necessary data from to create a device.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/DeviceInfo"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/DeviceInfo"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "The device was created successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DeviceHandle"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DeviceHandle"
                }
              }
            }
          }
        }
      }
    },
    "/devices/current" : {
      "get" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Returns the current device.",
        "operationId" : "getCurrentDevice",
        "responses" : {
          "200" : {
            "description" : "Device retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              }
            }
          },
          "404" : {
            "description" : "Device id does not exist."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "device" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Returns the current device.",
        "operationId" : "deleteCurrentDevice",
        "responses" : {
          "200" : {
            "description" : "The device was deleted successfully."
          },
          "404" : {
            "description" : "Device id does not exist."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "device" : [ ]
        } ]
      }
    },
    "/devices/{id}" : {
      "get" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Gets a device.",
        "operationId" : "getDevice",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The device id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "The device returned successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              }
            }
          },
          "404" : {
            "description" : "Device id does not exist."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "user" : [ ]
        }, {
          "admin" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Sets the values of a device.",
        "operationId" : "setDevice",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The device id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "requestBody" : {
          "description" : "The device values.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/Device"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/Device"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Device updated successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              }
            }
          },
          "409" : {
            "description" : "Parallel device modification.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              }
            }
          },
          "404" : {
            "description" : "Device id does not exist."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Deletes a device and it's data.",
        "operationId" : "deleteDevice",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The device id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "The device was deleted successfully."
          },
          "404" : {
            "description" : "Device id does not exist."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "user" : [ ]
        }, {
          "admin" : [ ]
        } ]
      }
    },
    "/users/current/devices" : {
      "get" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Returns a page of devices for the current user.",
        "operationId" : "getCurrentUserDevices",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Device page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DevicePage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DevicePage"
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "user" : [ ]
        } ]
      }
    },
    "/devices/current/user" : {
      "get" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Returns the user that is associated with a device.",
        "operationId" : "getCurrentDeviceUser",
        "responses" : {
          "200" : {
            "description" : "User retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "204" : {
            "description" : "No user associated."
          },
          "403" : {
            "description" : "No valid authorization found."
          }
        },
        "security" : [ {
          "device" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Connects a device created without user account with a user account.",
        "description" : "Executing this is operation requires a valid device and a valid user authentication to be transmitted simultaneously.",
        "operationId" : "setCurrentDeviceUser",
        "requestBody" : {
          "description" : "The device data.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/Device"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/Device"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "The device has been connected to the user account.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              }
            }
          },
          "409" : {
            "description" : "The device is already connected to a user account.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Device"
                }
              }
            }
          },
          "403" : {
            "description" : "The device or user credentials are missing or incorrect."
          }
        },
        "security" : [ {
          "device" : [ ]
        }, {
          "user" : [ ]
        } ]
      }
    },
    "/cities" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Returns a page of cities.",
        "operationId" : "getCities",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "The page of cities.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          }
        }
      }
    },
    "/cities/{id}" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Gets a city with a particular id.",
        "operationId" : "getCity",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The city id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "City retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/City"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/City"
                }
              }
            }
          },
          "404" : {
            "description" : "The city id does not exists."
          }
        }
      }
    },
    "/cities/{id}/boundary" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Gets the city boundary for a city with a particular id.",
        "operationId" : "getCityBoundary",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The city id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "City boundary retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Geometry"
                }
              }
            }
          },
          "204" : {
            "description" : "The city boundary is not available."
          },
          "404" : {
            "description" : "The city id does not exists."
          }
        }
      }
    },
    "/countries" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Returns a page of countries.",
        "operationId" : "getCountries",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Country page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CountryPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CountryPage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          }
        }
      }
    },
    "/countries/{id}" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Gets a country with a particular id.",
        "operationId" : "getCountry",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The country id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Country retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Country"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Country"
                }
              }
            }
          },
          "404" : {
            "description" : "The country does not exists."
          }
        }
      }
    },
    "/countries/{id}/boundary" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Gets the country boundary for a country with a particular id.",
        "operationId" : "getCountryBoundary",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The country id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Country boundary retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Geometry"
                }
              }
            }
          },
          "204" : {
            "description" : "The country boundary is not available."
          },
          "404" : {
            "description" : "The country id does not exists."
          }
        }
      }
    },
    "/countries/{id}/cities" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Gets a page of cities for a particular country ordered by importance.",
        "operationId" : "getCountryCities",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The country id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "City page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              }
            }
          },
          "404" : {
            "description" : "The country id does not exists."
          }
        }
      }
    },
    "/states/{id}" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Gets a state with a particular id.",
        "operationId" : "getState",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The state id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "State retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/State"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/State"
                }
              }
            }
          },
          "404" : {
            "description" : "The state does not exists."
          }
        }
      }
    },
    "/states/{id}/boundary" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Gets the state boundary for a state with a particular id.",
        "operationId" : "getStateBoundary",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The state id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "State boundary retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Geometry"
                }
              }
            }
          },
          "204" : {
            "description" : "The state boundary is not available."
          },
          "404" : {
            "description" : "The state id does not exists."
          }
        }
      }
    },
    "/state/{id}/boundary" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Gets the state boundary for a state with a particular id.",
        "operationId" : "getStateBoundaryDeprecated",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The state id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "State boundary retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Geometry"
                }
              }
            }
          },
          "204" : {
            "description" : "The state boundary is not available."
          },
          "404" : {
            "description" : "The state id does not exists."
          }
        },
        "deprecated" : true
      }
    },
    "/states/{id}/cities" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Gets a page of cities for a particular state ordered by importance.",
        "operationId" : "getStateCities",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The state id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "City page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              }
            }
          },
          "404" : {
            "description" : "The state id does not exists."
          }
        }
      }
    },
    "/states" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Returns a page of states.",
        "operationId" : "getStates",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "State page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/StatePage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/StatePage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          }
        }
      }
    },
    "/cities/resolve" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Returns a page of cities within a certain area defined by two coordiantes.",
        "operationId" : "resolveCities",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        }, {
          "name" : "longitude1",
          "in" : "query",
          "description" : "The longitude of the first coordinate.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        }, {
          "name" : "latitude1",
          "in" : "query",
          "description" : "The latitude of the first coordinate.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        }, {
          "name" : "longitude2",
          "in" : "query",
          "description" : "The longitude of the second coordinate.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        }, {
          "name" : "latitude2",
          "in" : "query",
          "description" : "The latitude of the second coordinate.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "The page of cities.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          }
        }
      }
    },
    "/cities/search" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Returns a page of cities that match the specified search term.",
        "operationId" : "searchCities",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        }, {
          "name" : "language",
          "in" : "query",
          "description" : "The language of the user interface.",
          "required" : true,
          "schema" : {
            "type" : "string",
            "enum" : [ "local", "acronym", "de", "en", "fr", "it", "es" ]
          },
          "example" : "de"
        }, {
          "name" : "location",
          "in" : "query",
          "description" : "The optional position of the user specified as longitude,latitude.",
          "schema" : {
            "$ref" : "#/components/schemas/Coordinate"
          },
          "example" : "7.065991,50.779012"
        }, {
          "name" : "term",
          "in" : "query",
          "description" : "The search term.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "The page of cities.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CityPage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          }
        }
      }
    },
    "/locations/search" : {
      "get" : {
        "tags" : [ "Default", "Location" ],
        "summary" : "Returns a page of locations whose name matches the term.",
        "operationId" : "searchLocations",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        }, {
          "name" : "language",
          "in" : "query",
          "description" : "The language of the user interface.",
          "required" : true,
          "schema" : {
            "type" : "string",
            "enum" : [ "local", "acronym", "de", "en", "fr", "it", "es" ]
          },
          "example" : "de"
        }, {
          "name" : "location",
          "in" : "query",
          "description" : "The optional position of the user specified as longitude,latitude.",
          "schema" : {
            "$ref" : "#/components/schemas/Coordinate"
          },
          "example" : "7.065991,50.779012"
        }, {
          "name" : "term",
          "in" : "query",
          "description" : "The search term.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Location hierarchy page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LocationHierarchyPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LocationHierarchyPage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          }
        }
      }
    },
    "/log/entities" : {
      "get" : {
        "tags" : [ "Default", "Service" ],
        "summary" : "Returns a list of entity statistics.",
        "operationId" : "getEntityStatistics",
        "responses" : {
          "200" : {
            "description" : "Entity statistics retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityStatistic"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/EntityStatistic"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      }
    },
    "/log/load" : {
      "get" : {
        "tags" : [ "Default", "Service" ],
        "summary" : "Returns the current load statistic.",
        "operationId" : "getLoadStatistic",
        "responses" : {
          "200" : {
            "description" : "Load statistic retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LoadStatistic"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LoadStatistic"
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      }
    },
    "/log/messages" : {
      "get" : {
        "tags" : [ "Default", "Service" ],
        "summary" : "Returns a list of log messages starting from a particular id.",
        "operationId" : "getLogMessages",
        "parameters" : [ {
          "name" : "from",
          "in" : "query",
          "description" : "The id of the first message to retrieve.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64",
            "default" : 0
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Log messages retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/LogMessage"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/LogMessage"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      }
    },
    "/log/system" : {
      "get" : {
        "tags" : [ "Default", "Service" ],
        "summary" : "Returns the system statistic.",
        "operationId" : "getSystemStatistic",
        "responses" : {
          "200" : {
            "description" : "System statistic retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SystemStatistic"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SystemStatistic"
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      }
    },
    "/devices/current/measurements/now" : {
      "post" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Adds a single measurement for the device that has been captured recently.",
        "operationId" : "addCurrentDeviceMeasurement",
        "requestBody" : {
          "description" : "The new measurement to add.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/Measurement"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/Measurement"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Measurement added successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Measurement"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Measurement"
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "device" : [ ]
        } ]
      }
    },
    "/devices/current/measurements" : {
      "get" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Returns a page of measurements of the current device from a certain time range.",
        "operationId" : "getCurrentDeviceMeasurements",
        "parameters" : [ {
          "name" : "start",
          "in" : "query",
          "description" : "The start time in Epoch milliseconds.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          },
          "example" : 1576921935000
        }, {
          "name" : "duration",
          "in" : "query",
          "description" : "The duration in milliseconds.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          },
          "example" : 60000
        }, {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Measurements retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MeasurementPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MeasurementPage"
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "device" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Adds a number of measurements for the current device.",
        "operationId" : "addCurrentDeviceMeasurements",
        "requestBody" : {
          "description" : "The new measurements to add.",
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/Measurement"
                }
              }
            },
            "application/xml" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/Measurement"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Measurements added successfully."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "device" : [ ]
        } ]
      }
    },
    "/devices/measurements" : {
      "get" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Returns a page of measurements of all devices within a certain time range.",
        "operationId" : "getAllMeasurementsByRange",
        "parameters" : [ {
          "name" : "start",
          "in" : "query",
          "description" : "The start time in Epoch milliseconds.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          },
          "example" : 1576921935000
        }, {
          "name" : "duration",
          "in" : "query",
          "description" : "The duration in milliseconds.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          },
          "example" : 60000
        }, {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Measurements retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MeasurementPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MeasurementPage"
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      }
    },
    "/devices/{id}/measurements" : {
      "get" : {
        "tags" : [ "Default", "Device" ],
        "summary" : "Returns a page of measurements of the current device from a certain time range.",
        "operationId" : "getDeviceMeasurements",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The device id.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "start",
          "in" : "query",
          "description" : "The start time in Epoch milliseconds.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          },
          "example" : 1576921935000
        }, {
          "name" : "duration",
          "in" : "query",
          "description" : "The duration in milliseconds.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          },
          "example" : 60000
        }, {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Measurements retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MeasurementPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MeasurementPage"
                }
              }
            }
          },
          "404" : {
            "description" : "The measurements were not found."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "user" : [ ]
        }, {
          "admin" : [ ]
        } ]
      }
    },
    "/users/current/locations" : {
      "get" : {
        "tags" : [ "Default", "Settings" ],
        "summary" : "Returns the favorite locations of the current user.",
        "operationId" : "getCurrentUserLocations",
        "responses" : {
          "200" : {
            "description" : "Locations retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/LocationHierarchy"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/LocationHierarchy"
                  }
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "user" : [ ]
        } ]
      }
    },
    "/users/current/settings" : {
      "get" : {
        "tags" : [ "Default", "Settings" ],
        "summary" : "Returns the settings of the current user.",
        "operationId" : "getCurrentUserSettings",
        "responses" : {
          "200" : {
            "description" : "Settings retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Settings"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Settings"
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "user" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Default", "Settings" ],
        "summary" : "Updates the settings of the current user.",
        "operationId" : "setCurrentUserSettings",
        "requestBody" : {
          "description" : "The settings to set.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/Settings"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/Settings"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Settings retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Settings"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Settings"
                }
              }
            }
          },
          "409" : {
            "description" : "Conflict due to parallel update.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Settings"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Settings"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameters."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "user" : [ ]
        } ]
      }
    },
    "/users" : {
      "get" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Returns a list of users.",
        "operationId" : "getUsers",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "User page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserPage"
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          },
          "400" : {
            "description" : "Invalid request parameters."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Adds a user account with the specified roles and emails.",
        "operationId" : "addUser",
        "requestBody" : {
          "description" : "The data for the new user.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/User"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/User"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "User added successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "409" : {
            "description" : "User login exists already."
          },
          "403" : {
            "description" : "Insufficient privileges."
          },
          "400" : {
            "description" : "Invalid user data."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      }
    },
    "/users/current" : {
      "get" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Returns the user that is currently authorized.",
        "operationId" : "getCurrentUser",
        "responses" : {
          "200" : {
            "description" : "User retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "403" : {
            "description" : "No valid authorization found."
          }
        },
        "security" : [ {
          "user" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Updates the currently authorized user.",
        "operationId" : "setCurrentUser",
        "requestBody" : {
          "description" : "The new user values to set.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/User"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/User"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "User updated successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "409" : {
            "description" : "User modified in parallel.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "403" : {
            "description" : "No valid authorization found."
          },
          "400" : {
            "description" : "Invalid user."
          }
        },
        "security" : [ {
          "user" : [ ]
        } ]
      }
    },
    "/users/{id}" : {
      "get" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Returns the user account with the specified id.",
        "operationId" : "getUser",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The id of the user to retrieve.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "User retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "404" : {
            "description" : "User id does not exist."
          },
          "403" : {
            "description" : "Insufficient privileges."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Updates the values of a particular user account.",
        "operationId" : "setUser",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The id of the user to set.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "requestBody" : {
          "description" : "The new user data to set.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/User"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/User"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "User updated successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "409" : {
            "description" : "User modified in parallel.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "404" : {
            "description" : "User id does not exist."
          },
          "403" : {
            "description" : "Insufficient privileges."
          },
          "400" : {
            "description" : "Invalid user data."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      }
    },
    "/users/register" : {
      "post" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Registers a new user and sends an email account verification.",
        "operationId" : "registerUser",
        "requestBody" : {
          "description" : "The data of the new user.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UserRegistration"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/UserRegistration"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "User registered successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "409" : {
            "description" : "User login already registered."
          },
          "400" : {
            "description" : "Invalid user registration."
          }
        }
      }
    },
    "/users/reset" : {
      "post" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Sends a password reset email to the correspondence email account of a user.",
        "operationId" : "resetUser",
        "parameters" : [ {
          "name" : "login",
          "in" : "query",
          "description" : "The login of the user to reset.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Reset email sent successfully."
          },
          "404" : {
            "description" : "Login does not exist."
          },
          "400" : {
            "description" : "User email has not been verified."
          }
        }
      }
    },
    "/users/password/{token}" : {
      "put" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Sets the password of a user account using a token received via email.",
        "operationId" : "resetUserPassword",
        "parameters" : [ {
          "name" : "token",
          "in" : "path",
          "description" : "The secret token received via email.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "The new user password.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UserPassword"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/UserPassword"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Password updated successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "403" : {
            "description" : "Password modification not allowed."
          },
          "400" : {
            "description" : "Invalid token or password."
          }
        }
      }
    },
    "/users/search" : {
      "get" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Returns a list of users whose login name or name contains the term.",
        "operationId" : "searchUsers",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        }, {
          "name" : "term",
          "in" : "query",
          "description" : "The search term.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "User page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/UserPage"
                }
              }
            }
          },
          "403" : {
            "description" : "Insufficient privileges."
          },
          "400" : {
            "description" : "Invalid request parameters."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      }
    },
    "/users/current/password" : {
      "put" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Sets the password of the currently authorized user.",
        "operationId" : "setCurrentPassword",
        "requestBody" : {
          "description" : "The new password to set.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UserPassword"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/UserPassword"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Password updated successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "403" : {
            "description" : "No valid authorization found."
          },
          "400" : {
            "description" : "Invalid password."
          }
        },
        "security" : [ {
          "user" : [ ]
        } ]
      }
    },
    "/users/{id}/password" : {
      "put" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Sets the password of a user.",
        "operationId" : "setUserPassword",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The id of the user to change.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "requestBody" : {
          "description" : "The new password.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/UserPassword"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/UserPassword"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Password updated successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/User"
                }
              }
            }
          },
          "404" : {
            "description" : "User id does not exist."
          },
          "403" : {
            "description" : "Insufficient privileges."
          },
          "400" : {
            "description" : "Invalid password."
          }
        },
        "security" : [ {
          "admin" : [ ]
        } ]
      }
    },
    "/users/verify/{token}" : {
      "put" : {
        "tags" : [ "Default", "User" ],
        "summary" : "Verifies an email address using a token received via email.",
        "operationId" : "verifyUserEmail",
        "parameters" : [ {
          "name" : "token",
          "in" : "path",
          "description" : "The secret token received via email.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "204" : {
            "description" : "Email verified successfully."
          },
          "403" : {
            "description" : "Email verification is not valid."
          },
          "400" : {
            "description" : "Invalid token."
          }
        }
      }
    },
    "/versions/build" : {
      "get" : {
        "tags" : [ "Default", "Service" ],
        "summary" : "Returns the build version.",
        "operationId" : "getBuildVersion",
        "responses" : {
          "200" : {
            "description" : "Build version retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BuildVersion"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BuildVersion"
                }
              }
            }
          }
        }
      }
    },
    "/cities/{id}/condition" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Gets the current weather condition for a city with a particular id.",
        "operationId" : "getCityCondition",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The city id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather condition retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherCondition"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherCondition"
                }
              }
            }
          },
          "204" : {
            "description" : "Weather condition not available."
          },
          "404" : {
            "description" : "City does not exist."
          }
        }
      }
    },
    "/cities/{id}/forecast" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Gets the weather forecast for a city with a particular id.",
        "operationId" : "getCityForecast",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The city id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather forecast retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherForecast"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherForecast"
                }
              }
            }
          },
          "204" : {
            "description" : "Weather forecast not available."
          },
          "404" : {
            "description" : "City does not exist."
          }
        }
      }
    },
    "/cities/{id}/station" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Gets the weather station for a city with a particular id.",
        "operationId" : "getCityStation",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The city id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather station retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherStation"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherStation"
                }
              }
            }
          },
          "204" : {
            "description" : "Weather station not available."
          },
          "404" : {
            "description" : "City does not exist."
          }
        }
      }
    },
    "/cities/{id}/videos" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Returns the all videos for the city.",
        "operationId" : "getCityVideos",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The city id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather video page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherVideoPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherVideoPage"
                }
              }
            }
          },
          "204" : {
            "description" : "Weather videos not available."
          },
          "404" : {
            "description" : "City does not exist."
          }
        }
      }
    },
    "/forecasts/{id}" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Gets the weather forecast with a particular id.",
        "operationId" : "getForecast",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The forecast id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather forecast retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherForecast"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherForecast"
                }
              }
            }
          },
          "404" : {
            "description" : "Weather forecast does not exist."
          }
        }
      }
    },
    "/cities/{id}/videos/latest" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Returns the latest videos for the city.",
        "operationId" : "getLatestCityVideos",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The city id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather video list retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/WeatherVideo"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/WeatherVideo"
                  }
                }
              }
            }
          },
          "204" : {
            "description" : "Weather videos not available."
          },
          "404" : {
            "description" : "City does not exist."
          }
        }
      }
    },
    "/stations/{id}/reports/latest" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Returns the latest weather report of a particular station.",
        "operationId" : "getLatestStationReport",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The station id.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather reports retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherReport"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherReport"
                }
              }
            }
          },
          "204" : {
            "description" : "No weather report for station available."
          },
          "404" : {
            "description" : "Weather station not found."
          }
        }
      }
    },
    "/videos/latest" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Returns the latest of weather videos.",
        "operationId" : "getLatestVideos",
        "responses" : {
          "200" : {
            "description" : "Weather video list retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/WeatherVideo"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/WeatherVideo"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/stations/{id}" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Gets a weather station with a particular id.",
        "operationId" : "getStation",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The station id.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather station retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherStation"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherStation"
                }
              }
            }
          },
          "404" : {
            "description" : "Weather station does not exist."
          }
        }
      }
    },
    "/stations/{id}/reports" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Returns a page of weather reports of a particular staton in a certain time range.",
        "operationId" : "getStationReports",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "The station id.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "start",
          "in" : "query",
          "description" : "The start time in Epoch milliseconds.",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          },
          "example" : 1576921935000
        }, {
          "name" : "duration",
          "in" : "query",
          "description" : "The duration in milliseconds.",
          "required" : true,
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          },
          "example" : 60000
        }, {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather reports retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherReportPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherReportPage"
                }
              }
            }
          },
          "404" : {
            "description" : "Weather station not found."
          }
        }
      }
    },
    "/stations" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Returns a page of weather stations, possibly filtered by name.",
        "operationId" : "getStations",
        "parameters" : [ {
          "name" : "term",
          "in" : "query",
          "description" : "An optional search term to filter the result by name.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather station page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherStationPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherStationPage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          }
        }
      }
    },
    "/videos" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Returns a page of weather videos.",
        "operationId" : "getVideos",
        "parameters" : [ {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather video page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherVideoPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherVideoPage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          }
        }
      }
    },
    "/forecasts/resolve" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Searches the (closest) weather forecast for a particular location.",
        "operationId" : "resolveForecast",
        "parameters" : [ {
          "name" : "longitude",
          "in" : "query",
          "description" : "The longitude.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        }, {
          "name" : "latitude",
          "in" : "query",
          "description" : "The latitude.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather forecast retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherForecast"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherForecast"
                }
              }
            }
          },
          "204" : {
            "description" : "Weather forecast not available."
          }
        }
      }
    },
    "/stations/resolve" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Searches the (closest) weather station for a particular location.",
        "operationId" : "resolveStation",
        "parameters" : [ {
          "name" : "longitude",
          "in" : "query",
          "description" : "The longitude.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        }, {
          "name" : "latitude",
          "in" : "query",
          "description" : "The latitude.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather station retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherStation"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherStation"
                }
              }
            }
          },
          "204" : {
            "description" : "Weather station not available."
          }
        }
      }
    },
    "/videos/resolve" : {
      "get" : {
        "tags" : [ "Default", "Weather" ],
        "summary" : "Returns a page of weather videos relevant for a location.",
        "operationId" : "resolveVideos",
        "parameters" : [ {
          "name" : "longitude",
          "in" : "query",
          "description" : "The longitude.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        }, {
          "name" : "latitude",
          "in" : "query",
          "description" : "The latitude.",
          "required" : true,
          "schema" : {
            "type" : "number",
            "format" : "double"
          }
        }, {
          "name" : "pageOffset",
          "in" : "query",
          "description" : "The offset in terms of elements.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The maximum number of elements on the page.",
          "schema" : {
            "maximum" : 1000,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Weather video page retrieved successfully.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherVideoPage"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WeatherVideoPage"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameter."
          }
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "Device" : {
        "required" : [ "device", "manufacturer", "model", "os" ],
        "type" : "object",
        "description" : "Represents a device.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Entity"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "user" : {
              "type" : "integer",
              "description" : "The id of the owning user or null, if there is none.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "os" : {
              "type" : "string",
              "description" : "The operating system.",
              "xml" : {
                "attribute" : true
              },
              "enum" : [ "ANDROID", "IOS", "ARDUINO" ]
            },
            "manufacturer" : {
              "type" : "string",
              "description" : "The manufacturer name, see android.os.Build.MANUFACTURER.",
              "xml" : {
                "attribute" : true
              }
            },
            "device" : {
              "type" : "string",
              "description" : "The device name, see android.os.Build.DEVICE.",
              "xml" : {
                "attribute" : true
              }
            },
            "model" : {
              "type" : "string",
              "description" : "The model name, see android.os.Build.MODEL.",
              "xml" : {
                "attribute" : true
              }
            }
          }
        } ]
      },
      "DeviceHandle" : {
        "required" : [ "device", "manufacturer", "model", "os", "token" ],
        "type" : "object",
        "description" : "Represents a device with a secret token.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Device"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "user" : {
              "type" : "integer",
              "description" : "The id of the owning user or null, if there is none.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "os" : {
              "type" : "string",
              "description" : "The operating system.",
              "xml" : {
                "attribute" : true
              },
              "enum" : [ "ANDROID", "IOS", "ARDUINO" ]
            },
            "manufacturer" : {
              "type" : "string",
              "description" : "The manufacturer name, see android.os.Build.MANUFACTURER.",
              "xml" : {
                "attribute" : true
              }
            },
            "device" : {
              "type" : "string",
              "description" : "The device name, see android.os.Build.DEVICE.",
              "xml" : {
                "attribute" : true
              }
            },
            "model" : {
              "type" : "string",
              "description" : "The model name, see android.os.Build.MODEL.",
              "xml" : {
                "attribute" : true
              }
            },
            "token" : {
              "type" : "string",
              "description" : "The secret token used for authenticating the device.",
              "xml" : {
                "attribute" : true
              }
            }
          }
        } ]
      },
      "Entity" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "integer",
            "description" : "The unique identifier of the data.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "creationTime" : {
            "type" : "integer",
            "description" : "The time stamp when the data was created.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "modificationTime" : {
            "type" : "integer",
            "description" : "The time stamp when the data was last modified.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "deleted" : {
            "type" : "boolean",
            "description" : "A flag to indicate whether the data was deleted.",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents an entity."
      },
      "DeviceInfo" : {
        "required" : [ "device", "manufacturer", "model", "os" ],
        "type" : "object",
        "properties" : {
          "os" : {
            "type" : "string",
            "description" : "The operating system.",
            "xml" : {
              "attribute" : true
            },
            "enum" : [ "ANDROID", "IOS", "ARDUINO" ]
          },
          "manufacturer" : {
            "type" : "string",
            "description" : "The manufacturer name, see android.os.Build.MANUFACTURER.",
            "xml" : {
              "attribute" : true
            }
          },
          "device" : {
            "type" : "string",
            "description" : "The device name, see android.os.Build.DEVICE.",
            "xml" : {
              "attribute" : true
            }
          },
          "model" : {
            "type" : "string",
            "description" : "The model name, see android.os.Build.MODEL.",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents information about a device."
      },
      "DevicePage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of devices.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/Device"
              }
            }
          }
        } ]
      },
      "Page" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "properties" : {
          "size" : {
            "type" : "integer",
            "description" : "The maximum number of elements on the page.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "offset" : {
            "type" : "integer",
            "description" : "The page offset (0-based) in number of elements.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "total" : {
            "type" : "integer",
            "description" : "The total number of elements available.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "elements" : {
            "type" : "array",
            "description" : "The elements of the page.",
            "xml" : {
              "wrapped" : true
            },
            "items" : {
              "type" : "object",
              "description" : "The elements of the page."
            }
          }
        },
        "description" : "Represents a page."
      },
      "City" : {
        "required" : [ "capital", "coordinate", "country", "names", "timezone", "type" ],
        "type" : "object",
        "description" : "Represents a city with all details.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Location"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "names" : {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string",
                "description" : "The names of the location by language code."
              },
              "description" : "The names of the location by language code."
            },
            "coordinate" : {
              "$ref" : "#/components/schemas/Coordinate"
            },
            "timezone" : {
              "type" : "string",
              "description" : "The timezone of the city.",
              "xml" : {
                "attribute" : true
              }
            },
            "capital" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the city is a capital.",
              "xml" : {
                "attribute" : true
              }
            },
            "population" : {
              "type" : "integer",
              "description" : "The population of the city.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "wikipedia" : {
              "type" : "string",
              "description" : "The optional wikipedia entry of the city.",
              "xml" : {
                "attribute" : true
              }
            },
            "type" : {
              "type" : "string",
              "description" : "The type of the city.",
              "xml" : {
                "attribute" : true
              },
              "enum" : [ "CITY", "TOWN", "VILLAGE", "SUBURB" ]
            },
            "country" : {
              "$ref" : "#/components/schemas/Country"
            },
            "state" : {
              "$ref" : "#/components/schemas/State"
            }
          }
        } ]
      },
      "CityPage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of cities.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/City"
              }
            }
          }
        } ]
      },
      "Coordinate" : {
        "required" : [ "latitude", "longitude" ],
        "type" : "object",
        "properties" : {
          "latitude" : {
            "type" : "number",
            "description" : "The latitude of the coordinate.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          },
          "longitude" : {
            "type" : "number",
            "description" : "The longitude of the coordinate.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents a wgs84 coordinate."
      },
      "Country" : {
        "required" : [ "coordinate", "names" ],
        "type" : "object",
        "description" : "Represents a country with all details.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Location"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "names" : {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string",
                "description" : "The names of the location by language code."
              },
              "description" : "The names of the location by language code."
            },
            "coordinate" : {
              "$ref" : "#/components/schemas/Coordinate"
            }
          }
        } ]
      },
      "Location" : {
        "required" : [ "coordinate", "names" ],
        "type" : "object",
        "description" : "Represents a location.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Entity"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "names" : {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string",
                "description" : "The names of the location by language code."
              },
              "description" : "The names of the location by language code."
            },
            "coordinate" : {
              "$ref" : "#/components/schemas/Coordinate"
            }
          }
        } ]
      },
      "State" : {
        "required" : [ "coordinate", "country", "names", "timezone" ],
        "type" : "object",
        "description" : "Represents a state with all details.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Location"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "names" : {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string",
                "description" : "The names of the location by language code."
              },
              "description" : "The names of the location by language code."
            },
            "coordinate" : {
              "$ref" : "#/components/schemas/Coordinate"
            },
            "timezone" : {
              "type" : "string",
              "description" : "The timezone of the state.",
              "xml" : {
                "attribute" : true
              }
            },
            "population" : {
              "type" : "integer",
              "description" : "The population of the state.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "wikipedia" : {
              "type" : "string",
              "description" : "The optional wikipedia entry of the state.",
              "xml" : {
                "attribute" : true
              }
            },
            "country" : {
              "$ref" : "#/components/schemas/Country"
            }
          }
        } ]
      },
      "Crs" : {
        "type" : "object",
        "properties" : {
          "type" : {
            "type" : "string",
            "enum" : [ "name", "link" ]
          },
          "properties" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            }
          }
        }
      },
      "Geometry" : {
        "type" : "object",
        "properties" : {
          "crs" : {
            "$ref" : "#/components/schemas/Crs"
          },
          "bbox" : {
            "type" : "array",
            "items" : {
              "type" : "number",
              "format" : "double"
            }
          },
          "coordinates" : {
            "type" : "array",
            "items" : {
              "type" : "object"
            }
          }
        }
      },
      "CountryPage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of countries.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/Country"
              }
            }
          }
        } ]
      },
      "StatePage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of states.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/State"
              }
            }
          }
        } ]
      },
      "LocationHierarchy" : {
        "required" : [ "coordinate", "names", "type" ],
        "type" : "object",
        "description" : "Represents a hierarchy of locations.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Location"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "names" : {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string",
                "description" : "The names of the location by language code."
              },
              "description" : "The names of the location by language code."
            },
            "coordinate" : {
              "$ref" : "#/components/schemas/Coordinate"
            },
            "type" : {
              "type" : "string",
              "description" : "The type of the location.",
              "xml" : {
                "attribute" : true
              },
              "enum" : [ "COUNTRY", "STATE", "CITY" ]
            },
            "parent" : {
              "$ref" : "#/components/schemas/LocationHierarchy"
            }
          }
        } ]
      },
      "LocationHierarchyPage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of locations with their hierarchical relationship.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/LocationHierarchy"
              }
            }
          }
        } ]
      },
      "EntityStatistic" : {
        "required" : [ "deleted", "name", "total" ],
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string",
            "description" : "The name of the entity.",
            "xml" : {
              "attribute" : true
            }
          },
          "total" : {
            "type" : "integer",
            "description" : "The total number of stored entities.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "deleted" : {
            "type" : "integer",
            "description" : "The number of deleted entities.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents statistics about peristent entities."
      },
      "LoadStatistic" : {
        "required" : [ "cpuLoad", "gcCount", "gcDuration", "maxHeapSize", "maxNonHeapSize", "uptime", "usedHeapSize", "usedNonHeapSize" ],
        "type" : "object",
        "properties" : {
          "cpuLoad" : {
            "type" : "number",
            "description" : "The average cpu load over the last minute.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          },
          "uptime" : {
            "type" : "integer",
            "description" : "The uptime of the jvm in milliseconds.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "gcCount" : {
            "type" : "integer",
            "description" : "The total number of garbage collector executions.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "gcDuration" : {
            "type" : "integer",
            "description" : "The total time for garbage collection in milliseconds.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "maxHeapSize" : {
            "type" : "integer",
            "description" : "The maximum heap size available in bytes.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "usedHeapSize" : {
            "type" : "integer",
            "description" : "The used heap size available in bytes.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "maxNonHeapSize" : {
            "type" : "integer",
            "description" : "The maximum non heap size available in bytes.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "usedNonHeapSize" : {
            "type" : "integer",
            "description" : "The used non heap size available in bytes.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents statistics about the system usage."
      },
      "LogMessage" : {
        "required" : [ "className", "id", "level", "loggerName", "methodName", "thread", "time" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "integer",
            "description" : "An auto-generated sequential id.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "time" : {
            "type" : "integer",
            "description" : "The creation time in Epoch milliseconds.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "thread" : {
            "type" : "integer",
            "description" : "The id of the thread.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "level" : {
            "type" : "string",
            "description" : "The message severity.",
            "xml" : {
              "attribute" : true
            }
          },
          "loggerName" : {
            "type" : "string",
            "description" : "The name of the logger.",
            "xml" : {
              "attribute" : true
            }
          },
          "className" : {
            "type" : "string",
            "description" : "The name of the class.",
            "xml" : {
              "attribute" : true
            }
          },
          "methodName" : {
            "type" : "string",
            "description" : "The name of the method.",
            "xml" : {
              "attribute" : true
            }
          },
          "message" : {
            "type" : "string",
            "description" : "The actual (optional) message."
          },
          "trace" : {
            "type" : "string",
            "description" : "An optional stack trace."
          }
        },
        "description" : "Represents a log message."
      },
      "SystemStatistic" : {
        "required" : [ "osArchitecture", "osName", "osVersion", "processors", "vmName", "vmSpecification", "vmVendor", "vmVersion" ],
        "type" : "object",
        "properties" : {
          "osArchitecture" : {
            "type" : "string",
            "description" : "The architecture of the operating system.",
            "xml" : {
              "attribute" : true
            }
          },
          "osName" : {
            "type" : "string",
            "description" : " The name of the operating system.",
            "xml" : {
              "attribute" : true
            }
          },
          "osVersion" : {
            "type" : "string",
            "description" : "A version string of the operating system.",
            "xml" : {
              "attribute" : true
            }
          },
          "vmName" : {
            "type" : "string",
            "description" : "The name of the virtual machine.",
            "xml" : {
              "attribute" : true
            }
          },
          "vmSpecification" : {
            "type" : "string",
            "description" : "The name of the virtual machine specification.",
            "xml" : {
              "attribute" : true
            }
          },
          "vmVendor" : {
            "type" : "string",
            "description" : "The name of the virtual machine vendor.",
            "xml" : {
              "attribute" : true
            }
          },
          "vmVersion" : {
            "type" : "string",
            "description" : "A version string for the virtual machine.",
            "xml" : {
              "attribute" : true
            }
          },
          "processors" : {
            "type" : "integer",
            "description" : "The number of available processors.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents information about the system."
      },
      "Measurement" : {
        "required" : [ "device", "time", "version" ],
        "type" : "object",
        "description" : "Represents a measurement of a device at a particular point in time.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Entity"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "coordinate" : {
              "$ref" : "#/components/schemas/Coordinate"
            },
            "time" : {
              "type" : "integer",
              "description" : "The timestamp of the measurement in Epoch milliseconds.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "device" : {
              "type" : "integer",
              "description" : "The device id of the measurement.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "version" : {
              "type" : "integer",
              "description" : "The app version (version code on Android or build code on IOS).",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "temperature" : {
              "type" : "number",
              "description" : "The calculated air temperature (estimated by the service) in centigrade, may be null.",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            },
            "pressure" : {
              "type" : "number",
              "description" : "The calculated air pressure (estimated by the service) in hPA, may be null.",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            },
            "humidity" : {
              "type" : "number",
              "description" : "The calculated relative humidity (estimated by the service) in percent, may be null.",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            },
            "rating" : {
              "type" : "number",
              "description" : "The calculated measurement rating (estimated by the service) from 0 (low quality) to 1 (high quality), may be null.",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            },
            "data" : {
              "type" : "object",
              "additionalProperties" : {
                "type" : "string",
                "description" : "The raw data captured by the device."
              },
              "description" : "The raw data captured by the device.",
              "xml" : {
                "wrapped" : true
              }
            }
          }
        } ]
      },
      "MeasurementPage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of measurements.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/Measurement"
              }
            }
          }
        } ]
      },
      "LocationReference" : {
        "required" : [ "id", "type" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "type" : "string",
            "description" : "The location type.",
            "xml" : {
              "attribute" : true
            },
            "enum" : [ "COUNTRY", "STATE", "CITY" ]
          },
          "id" : {
            "type" : "integer",
            "description" : "The location id.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents a reference to a location."
      },
      "Settings" : {
        "required" : [ "locations" ],
        "type" : "object",
        "description" : "Represents the user's settings.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Entity"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "locations" : {
              "type" : "array",
              "description" : "The user's favorite locations.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/LocationReference"
              }
            }
          }
        } ]
      },
      "Email" : {
        "required" : [ "address", "correspondence", "verified" ],
        "type" : "object",
        "description" : "Represents a user.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Entity"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "address" : {
              "type" : "string",
              "description" : "The email address.",
              "xml" : {
                "attribute" : true
              }
            },
            "correspondence" : {
              "type" : "boolean",
              "description" : "A flag to mark the email address as primary email.",
              "xml" : {
                "attribute" : true
              }
            },
            "verified" : {
              "type" : "boolean",
              "description" : "A flag to mark the email address as verified.",
              "xml" : {
                "attribute" : true
              }
            }
          }
        } ]
      },
      "User" : {
        "required" : [ "emails", "login", "roles", "suspended" ],
        "type" : "object",
        "description" : "Represents a user.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Entity"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "login" : {
              "pattern" : "(\\p{L}|[0-9]){5,32}",
              "type" : "string",
              "description" : "The (globally unique) login of the user.",
              "xml" : {
                "attribute" : true
              }
            },
            "name" : {
              "pattern" : "(\\p{L}| ){0,64}",
              "type" : "string",
              "description" : "The human name of the user.",
              "xml" : {
                "attribute" : true
              }
            },
            "suspended" : {
              "type" : "boolean",
              "description" : "A flag to indicate that user account is suspended.",
              "xml" : {
                "attribute" : true
              }
            },
            "roles" : {
              "type" : "array",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "type" : "string",
                "xml" : {
                  "name" : "role"
                }
              }
            },
            "emails" : {
              "type" : "array",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/Email"
              }
            }
          }
        } ]
      },
      "UserPage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of users.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/User"
              }
            }
          }
        } ]
      },
      "UserPassword" : {
        "required" : [ "password" ],
        "type" : "object",
        "properties" : {
          "password" : {
            "maxLength" : 2147483647,
            "minLength" : 6,
            "type" : "string",
            "description" : "The new password.",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents a user password."
      },
      "UserRegistration" : {
        "required" : [ "email", "login", "name", "password" ],
        "type" : "object",
        "description" : "Represents a user registration.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/UserPassword"
        }, {
          "type" : "object",
          "properties" : {
            "password" : {
              "maxLength" : 2147483647,
              "minLength" : 6,
              "type" : "string",
              "description" : "The new password.",
              "xml" : {
                "attribute" : true
              }
            },
            "login" : {
              "pattern" : "(\\p{L}|[0-9]){5,32}",
              "type" : "string",
              "description" : "The requested login name.",
              "xml" : {
                "attribute" : true
              }
            },
            "name" : {
              "pattern" : "(\\p{L}| ){0,64}",
              "type" : "string",
              "description" : "The human name.",
              "xml" : {
                "attribute" : true
              }
            },
            "email" : {
              "pattern" : ".+@.+\\..+",
              "type" : "string",
              "description" : "The email address.",
              "xml" : {
                "attribute" : true
              }
            }
          }
        } ]
      },
      "BuildVersion" : {
        "required" : [ "build", "creator", "time", "version" ],
        "type" : "object",
        "properties" : {
          "time" : {
            "type" : "integer",
            "description" : "The build time in Epoch milliseconds.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "build" : {
            "type" : "string",
            "description" : "The build number.",
            "xml" : {
              "attribute" : true
            }
          },
          "creator" : {
            "type" : "string",
            "description" : "The creator of the build.",
            "xml" : {
              "attribute" : true
            }
          },
          "version" : {
            "type" : "string",
            "description" : "The version of the build.",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents version information about the running build."
      },
      "WeatherCondition" : {
        "required" : [ "cloudCoverage", "cloudDepth", "duration", "hour", "humidity", "precipitation", "pressure", "snowDepth", "source", "temperature", "time", "type", "windDirection", "windSpeed" ],
        "type" : "object",
        "properties" : {
          "source" : {
            "type" : "string",
            "description" : "The source of the condition.",
            "xml" : {
              "attribute" : true
            },
            "enum" : [ "ICON_GLOBAL", "ICON_EUROPE", "COSMO_EUROPE", "WEATHER_STATION" ]
          },
          "time" : {
            "type" : "integer",
            "description" : "The time when the condition arrises in Epoch milliseconds.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "hour" : {
            "type" : "integer",
            "description" : "The hour as an offset from the computation time.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "duration" : {
            "type" : "integer",
            "description" : "The duration of the condition in hours.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "type" : {
            "type" : "string",
            "description" : "The weather interpretation type describing the condition.",
            "xml" : {
              "attribute" : true
            },
            "enum" : [ "UNKNOWN", "CLEAR_SKY", "MAINLY_CLEAR", "PARTLY_CLOUDY", "CLOUDY", "FOG", "FOG_DEPOSITING_RIME", "SLIGHT_DRIZZLE", "MODERATE_DRIZZLE", "HEAVY_DRIZZLE", "DRIZZLE_FREEZING_SLIGHT", "DRIZZLE_FREEZING_MODERATE_HEAVY", "SLIGHT_RAIN_NOT_FREEZING", "MODERATE_RAIN_NOT_FREEZING", "HEAVY_RAIN_NOT_FREEZING", "RAIN_FREEZING_SLIGHT", "RAIN_FREEZING_MODERATE_HEAVY", "SLIGHT_FALL_OF_SNOWFLAKES", "MODERATE_FALL_OF_SNOWFLAKES", "HEAVY_FALL_OF_SNOWFLAKES", "SNOW_GRAINS", "RAIN_SHOWER_SLIGHT", "RAIN_SHOWER_MODERATE_HEAVY", "RAIN_SHOWER_VIOLENT", "SNOW_SHOWER_SLIGHT", "SNOW_SHOWER_MODERATE_HEAVY", "THUNDERSTORM_SLIGHT_MODERATE", "THUNDERSTORM_HAIL_HEAVY" ]
          },
          "temperature" : {
            "type" : "number",
            "description" : "The temperature at two meters above the ground in degree centigrade.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          },
          "windDirection" : {
            "type" : "string",
            "description" : "The wind direction at ten meters above the ground.",
            "xml" : {
              "attribute" : true
            },
            "enum" : [ "UNKNOWN", "NORTH", "NORTH_EAST", "EAST", "SOUTH_EAST", "SOUTH", "SOUTH_WEST", "WEST", "NORTH_WEST" ]
          },
          "windSpeed" : {
            "type" : "number",
            "description" : "The wind speed at ten meters above the ground in meters per second.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          },
          "cloudCoverage" : {
            "type" : "number",
            "description" : "The cloud coverage in percent from 0 (no clouds) to 1 (totally clouded).",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          },
          "cloudDepth" : {
            "type" : "number",
            "description" : "The cloud depth in percent.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          },
          "pressure" : {
            "type" : "number",
            "description" : "The air pressure at the surface height in hPa.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          },
          "precipitation" : {
            "type" : "number",
            "description" : "The total precipitation in kg per square meter per hour during the duration.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          },
          "snowDepth" : {
            "type" : "number",
            "description" : "The show depth in meters.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          },
          "humidity" : {
            "type" : "number",
            "description" : "The relative humidity in percent at 2m above the surface.",
            "format" : "double",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents the weather condition at a particular point in time."
      },
      "WeatherForecast" : {
        "required" : [ "conditions", "coordinate", "plantCoverage", "soilType", "source", "surfaceHeight" ],
        "type" : "object",
        "description" : "Represents a weather forecast for a location.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Entity"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "coordinate" : {
              "$ref" : "#/components/schemas/Coordinate"
            },
            "source" : {
              "type" : "string",
              "description" : "The source of the forecast.",
              "xml" : {
                "attribute" : true
              },
              "enum" : [ "ICON_GLOBAL", "ICON_EUROPE", "COSMO_EUROPE", "WEATHER_STATION" ]
            },
            "surfaceHeight" : {
              "type" : "number",
              "description" : "The surface height at the location (in meters above sea level).",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            },
            "plantCoverage" : {
              "type" : "number",
              "description" : "The plant coverage at the location (in percent).",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            },
            "soilType" : {
              "type" : "string",
              "description" : "The soil type at the location.",
              "xml" : {
                "attribute" : true
              },
              "enum" : [ "ICE", "ROCK", "SAND", "SANDYLOAM", "LOAM", "CLAYLOAM", "CLAY", "PEAT", "SEA_WATER" ]
            },
            "conditions" : {
              "type" : "array",
              "description" : "The weather conditions constituting the forecast.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/WeatherCondition"
              }
            }
          }
        } ]
      },
      "WeatherStation" : {
        "required" : [ "altitude", "coordinate", "name", "operator" ],
        "type" : "object",
        "description" : "Represents a weather station.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Entity"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "name" : {
              "type" : "string",
              "description" : "The name of the station.",
              "xml" : {
                "attribute" : true
              }
            },
            "coordinate" : {
              "$ref" : "#/components/schemas/Coordinate"
            },
            "altitude" : {
              "type" : "number",
              "description" : "The altitude of the station (in meters above sea level).",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            },
            "operator" : {
              "type" : "string",
              "description" : "The operator of the station.",
              "xml" : {
                "attribute" : true
              },
              "enum" : [ "DWD" ]
            },
            "externalId" : {
              "type" : "string",
              "description" : "An external id used by the operator.",
              "xml" : {
                "attribute" : true
              }
            }
          }
        } ]
      },
      "WeatherVideo" : {
        "required" : [ "duration", "fph", "fps", "height", "northEast", "preview", "scale", "source", "southWest", "start", "time", "type", "url", "width" ],
        "type" : "object",
        "properties" : {
          "southWest" : {
            "$ref" : "#/components/schemas/Coordinate"
          },
          "northEast" : {
            "$ref" : "#/components/schemas/Coordinate"
          },
          "type" : {
            "type" : "string",
            "description" : "The type of weather data contained in the video.",
            "xml" : {
              "attribute" : true
            },
            "enum" : [ "CLOUD", "PRECIPITATION", "PRESSURE", "TEMPERATURE", "WIND" ]
          },
          "source" : {
            "type" : "string",
            "description" : "The type of weather data contained in the video.",
            "xml" : {
              "attribute" : true
            },
            "enum" : [ "ICON_GLOBAL", "ICON_EUROPE", "COSMO_EUROPE", "WEATHER_STATION" ]
          },
          "time" : {
            "type" : "integer",
            "description" : "The time of the prediction in Epoch milliseconds.",
            "format" : "int64",
            "xml" : {
              "attribute" : true
            }
          },
          "start" : {
            "type" : "integer",
            "description" : "The start hour of the forecast.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "duration" : {
            "type" : "integer",
            "description" : " The total duration of the forecast in hours.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "fph" : {
            "type" : "integer",
            "description" : "The number of frames per forecast hour.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "fps" : {
            "type" : "integer",
            "description" : "The number of frames per second of video time.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "width" : {
            "type" : "integer",
            "description" : "The width of the video in pixels.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "height" : {
            "type" : "integer",
            "description" : "The height of the video in pixels.",
            "format" : "int32",
            "xml" : {
              "attribute" : true
            }
          },
          "url" : {
            "type" : "string",
            "description" : "The url to download the video.",
            "xml" : {
              "attribute" : true
            }
          },
          "preview" : {
            "type" : "string",
            "description" : "The url of a preview image.",
            "xml" : {
              "attribute" : true
            }
          },
          "scale" : {
            "type" : "string",
            "description" : "The url of a scale image.",
            "xml" : {
              "attribute" : true
            }
          }
        },
        "description" : "Represents a weather video."
      },
      "WeatherVideoPage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of weather videos.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/WeatherVideo"
              }
            }
          }
        } ]
      },
      "WeatherReport" : {
        "required" : [ "station", "time" ],
        "type" : "object",
        "description" : "Represents a weather report of a weather station.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Entity"
        }, {
          "type" : "object",
          "properties" : {
            "id" : {
              "type" : "integer",
              "description" : "The unique identifier of the data.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "creationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was created.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "modificationTime" : {
              "type" : "integer",
              "description" : "The time stamp when the data was last modified.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "deleted" : {
              "type" : "boolean",
              "description" : "A flag to indicate whether the data was deleted.",
              "xml" : {
                "attribute" : true
              }
            },
            "station" : {
              "type" : "integer",
              "description" : "The id of the station.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "time" : {
              "type" : "integer",
              "description" : "The measurement time in Epoch milliseconds.",
              "format" : "int64",
              "xml" : {
                "attribute" : true
              }
            },
            "temperature" : {
              "type" : "number",
              "description" : "The temperature at two meters above the ground in degree centigrade.",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            },
            "pressure" : {
              "type" : "number",
              "description" : "The air pressure at the station's altitude in hPa.",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            },
            "humidity" : {
              "type" : "number",
              "description" : "The relative humidity measured at two meters above the ground.",
              "format" : "double",
              "xml" : {
                "attribute" : true
              }
            }
          }
        } ]
      },
      "WeatherReportPage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of weather reports.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/WeatherReport"
              }
            }
          }
        } ]
      },
      "WeatherStationPage" : {
        "required" : [ "elements", "offset", "size", "total" ],
        "type" : "object",
        "description" : "Represents a page of weather stations.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "properties" : {
            "size" : {
              "type" : "integer",
              "description" : "The maximum number of elements on the page.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "offset" : {
              "type" : "integer",
              "description" : "The page offset (0-based) in number of elements.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "total" : {
              "type" : "integer",
              "description" : "The total number of elements available.",
              "format" : "int32",
              "xml" : {
                "attribute" : true
              }
            },
            "elements" : {
              "type" : "array",
              "description" : "The elements of the page.",
              "xml" : {
                "wrapped" : true
              },
              "items" : {
                "$ref" : "#/components/schemas/WeatherStation"
              }
            }
          }
        } ]
      }
    },
    "securitySchemes" : {
      "admin" : {
        "type" : "http",
        "description" : "Operations requiring admin privileges.",
        "scheme" : "basic"
      },
      "device" : {
        "type" : "apiKey",
        "description" : "Operations requiring device privileges.",
        "name" : "Authorization",
        "in" : "header"
      },
      "user" : {
        "type" : "http",
        "description" : "Operations requiring a valid user.",
        "scheme" : "basic"
      }
    }
  }
}