{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/kontaktio/main/json-schema/kontaktio-floors-schema.json",
  "title": "Floors",
  "description": "Smart Location Floor. Includes floor building and gateways located in the floor's rooms.",
  "x-generated": "2026-10-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/kontaktio-floors-api-openapi.yml#/components/schemas/Floors",
  "type": "object",
  "properties": {
    "content": {
      "type": "array",
      "uniqueItems": true,
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "description": "Floor Id."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Floor name."
          },
          "height": {
            "type": "number",
            "description": "Floor’s height in meters."
          },
          "width": {
            "type": "number",
            "description": "Floor’s width in meters."
          },
          "anchorLat": {
            "type": "number",
            "description": "Latitude of floor’s bottom right corner."
          },
          "anchorLng": {
            "type": "number",
            "description": "Longitude of floor’s bottom right corner."
          },
          "rotation": {
            "type": "number",
            "description": "Rotation of floor boundary rectangle on earth map. In radians."
          },
          "properties": {
            "type": "object",
            "properties": {
              "XYQBEfNXvyCH": {
                "type": "string",
                "minLength": 1
              },
              "aTOExKSzKweg": {
                "type": "string",
                "minLength": 1
              },
              "tWaUaNAquRxX": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "XYQBEfNXvyCH",
              "aTOExKSzKweg",
              "tWaUaNAquRxX"
            ]
          },
          "building": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number",
                "description": "Building Id."
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "description": "Building name."
              }
            },
            "required": [
              "id",
              "name"
            ]
          },
          "level": {
            "type": "number",
            "description": "Floor’s level."
          },
          "latLngGeojson": {
            "type": "object",
            "description": "GeoJSON format description of floor boundary vertices (using latitude and longitude coordinates).",
            "properties": {
              "type": {
                "type": "string",
                "minLength": 1
              },
              "geometry": {
                "type": "object",
                "required": [
                  "type",
                  "coordinates"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "minLength": 1
                  },
                  "coordinates": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "0": {
                          "type": "array",
                          "uniqueItems": true,
                          "items": {
                            "type": "object",
                            "properties": {
                              "0": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "1": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "2": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "3": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "4": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "required": [
              "type",
              "geometry"
            ]
          },
          "xyGeojson": {
            "type": "object",
            "description": "GeoJSON format description of floor boundary vertices (using meters, bottom left point should always be [0, 0]).",
            "properties": {
              "type": {
                "type": "string",
                "minLength": 1
              },
              "geometry": {
                "type": "object",
                "required": [
                  "type",
                  "coordinates"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "minLength": 1
                  },
                  "coordinates": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "0": {
                          "type": "array",
                          "uniqueItems": true,
                          "items": {
                            "type": "object",
                            "properties": {
                              "0": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "1": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "2": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "3": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "4": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "required": [
              "type",
              "geometry"
            ]
          },
          "imageLatLngGeojson": {
            "type": "object",
            "description": "GeoJSON format description of floor plan boundary vertices (using latitude and longitude coordinates).",
            "properties": {
              "type": {
                "type": "string",
                "minLength": 1
              },
              "geometry": {
                "type": "object",
                "required": [
                  "type",
                  "coordinates"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "minLength": 1
                  },
                  "coordinates": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "0": {
                          "type": "array",
                          "uniqueItems": true,
                          "items": {
                            "type": "object",
                            "properties": {
                              "0": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "1": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "2": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "3": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "4": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "required": [
              "type",
              "geometry"
            ]
          },
          "imageXyGeojson": {
            "type": "object",
            "description": "GeoJSON format description of floor plan boundary vertices (using meters relative to baseline of floor).",
            "properties": {
              "type": {
                "type": "string",
                "minLength": 1
              },
              "geometry": {
                "type": "object",
                "required": [
                  "type",
                  "coordinates"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "minLength": 1
                  },
                  "coordinates": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "0": {
                          "type": "array",
                          "uniqueItems": true,
                          "items": {
                            "type": "object",
                            "properties": {
                              "0": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "1": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "2": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "3": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              },
                              "4": {
                                "type": "array",
                                "uniqueItems": true,
                                "items": {
                                  "type": "object"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "required": [
              "type",
              "geometry"
            ]
          },
          "gateways": {
            "type": "array",
            "uniqueItems": true,
            "minItems": 1,
            "description": "Gateways placed in room.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "number",
                  "description": "Id of the gateway."
                },
                "lat": {
                  "type": "number",
                  "description": "Latitude of a gateway."
                },
                "lng": {
                  "type": "number",
                  "description": "Longitude of a gateway."
                },
                "altitude": {
                  "type": "number",
                  "description": "Height in meters above sea level."
                },
                "x": {
                  "type": "number",
                  "description": "Horizontal coordinate of a gateway (in meters relative to baseline of floor)."
                },
                "y": {
                  "type": "number",
                  "description": "Vertical coordinate of a gateway (in meters relative to baseline of floor)."
                },
                "z": {
                  "type": "number",
                  "description": "Height coordinate of a gateway. (in meters relative to baseline of floor)."
                },
                "verticalOrientation": {
                  "type": "number",
                  "description": "Rotation in degrees on the horizontal plane. 0 = parallel to the ground facing up, 90 = on the wall, 180 = parallel to the ground facing down."
                },
                "range": {
                  "type": "number",
                  "description": "Minimum RSSI. When calculating position, if strongest signal will have less RSSI than range, that result will be rejected, and beacon considered lost."
                },
                "virtual": {
                  "type": "boolean",
                  "description": "Virtual gateway will be used to map lat, lng to sourceId. There should be one virtual gateway in each floor. Virtual gateway is created automatically when creating floor."
                },
                "sourceId": {
                  "type": "string",
                  "minLength": 1,
                  "description": "SourceId of the gateway."
                }
              },
              "required": [
                "id",
                "lat",
                "lng",
                "altitude",
                "x",
                "y",
                "z",
                "verticalOrientation",
                "range",
                "virtual",
                "sourceId"
              ]
            }
          }
        },
        "required": [
          "id",
          "name",
          "height",
          "width",
          "anchorLat",
          "anchorLng",
          "rotation",
          "level"
        ]
      }
    }
  },
  "required": [
    "content"
  ]
}