{
  "openapi": "3.0.3",
  "info": {
    "title": "vc",
    "version": "1.0.1775813760260",
    "description": "Сервис vc",
    "license": {
      "name": "CC BY-NC-ND 4.0",
      "url": "https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md"
    }
  },
  "tags": [
    {
      "name": "camera(auth)",
      "description": "Методы camera. Требуют авторизацию. Доступны из интернета"
    },
    {
      "name": "camera_collection(auth)",
      "description": "Методы camera_collection. Требуют авторизацию. Доступны из интернета"
    },
    {
      "name": "camera_location_data(auth)",
      "description": "Методы camera_location_data. Требуют авторизацию. Доступны из интернета"
    },
    {
      "name": "camera_video_data(auth)",
      "description": "Методы camera_video_data. Требуют авторизацию. Доступны из интернета"
    },
    {
      "name": "company(auth)",
      "description": "Методы company. Требуют авторизацию. Доступны из интернета"
    }
  ],
  "paths": {
    "/vc/api/v1/camera": {
      "post": {
        "summary": "Метод создания камеры.\nМетод доступен для: admin, service, bti",
        "operationId": "CameraService_PostCamera",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostCameraResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostCameraResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostCameraResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1PostCameraRequest"
              }
            }
          },
          "required": true
        },
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ]
      }
    },
    "/vc/api/v1/camera/list": {
      "get": {
        "summary": "Метод получения списка камер.\nДля owner, employee параметр scope.vc_company_id подставляется из токена.\nМетод доступен для: admin, service, bti, ltp_first, owner, employee",
        "operationId": "CameraService_GetCameraList",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraListResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "scope.vcCompanyId",
            "description": "Внешний идентификатор компании",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "filter.isActive",
            "description": "Признак активности камеры",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "filter.isChannelAlive",
            "description": "Признак активности канала",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "filter.isOnline",
            "description": "Статус камеры",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "filter.cameraType",
            "description": "Тип камеры\n\n - TYPE_UNKNOWN: Значение не указано\n - DVR: Регистратор\n - VMS: Система управления видео\n - ROSE: RTSP-камера\n - VIOLET: IP-камера",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "DVR",
                "VMS",
                "ROSE",
                "VIOLET"
              ]
            }
          },
          {
            "name": "paging.orderByType",
            "description": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию\n\n - ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - UID: По идентификатору",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "UID"
              ]
            }
          },
          {
            "name": "paging.directionType",
            "description": "Тип направления сортировки.\n# По умолчанию: DESC\n\n - DIRECTION_TYPE_UNKNOWN: Значение не указано\n - DESC: От большего к меньшему\n - ASC: От меньшего к большему",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "DESC",
                "ASC"
              ]
            }
          },
          {
            "name": "paging.limit",
            "description": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\n# Диапазон: 0..100.\n# По умолчанию: 20",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "paging.offset",
            "description": "Сдвиг.\n# Диапазон: 0..2147483647",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera/room/attach/list": {
      "put": {
        "summary": "Метод пакетной привязки камер и квартир.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraService_PutCameraRoomAttachList",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomAttachListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomAttachListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomAttachListResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1PutCameraRoomAttachListRequest"
              }
            }
          },
          "required": true
        },
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ]
      }
    },
    "/vc/api/v1/camera/room/count": {
      "get": {
        "summary": "Метод получения количества связей камеры и квартиры.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraService_GetCameraRoomCount",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraRoomCountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraRoomCountResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraRoomCountResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter.cameraUids",
            "description": "По Идентификаторам камер.\n# Диапазон: 0..100",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.orpons",
            "description": "По ОРПОНам.\n# Диапазон: 0..100",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "int64"
              }
            }
          },
          {
            "name": "filter.roomNumbers",
            "description": "По квартирам.\n# Диапазон: 0..100",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera/room/detach/list": {
      "put": {
        "summary": "Метод пакетной отвязки камер и квартир.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraService_PutCameraRoomDetachList",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomDetachListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomDetachListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomDetachListResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1PutCameraRoomDetachListRequest"
              }
            }
          },
          "required": true
        },
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ]
      }
    },
    "/vc/api/v1/camera/room/list": {
      "get": {
        "summary": "Метод получения списка связей камеры и квартиры.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraService_GetCameraRoomList",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "result": {
                      "$ref": "#/components/schemas/v1GetCameraRoomListResponse"
                    },
                    "error": {
                      "$ref": "#/components/schemas/googlerpcStatus"
                    }
                  },
                  "title": "Поток объектов v1GetCameraRoomListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка"
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter.cameraUids",
            "description": "По Идентификаторам камер.\n# Диапазон: 0..100",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.orpons",
            "description": "По ОРПОНам.\n# Диапазон: 0..100",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "int64"
              }
            }
          },
          {
            "name": "filter.roomNumbers",
            "description": "По квартирам.\n# Диапазон: 0..100",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "paging.orderByType",
            "description": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию CAMERA_UID\n\n - ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - CAMERA_UID: По Идентификатору камеры\n - ORPON_ROOM_NUMBER: По ОРПОН и номеру квартиры",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "CAMERA_UID",
                "ORPON_ROOM_NUMBER"
              ]
            }
          },
          {
            "name": "paging.directionType",
            "description": "Тип направления сортировки.\n# По умолчанию: DESC\n\n - DIRECTION_TYPE_UNKNOWN: Значение не указано\n - DESC: От большего к меньшему\n - ASC: От меньшего к большему",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "DESC",
                "ASC"
              ]
            }
          },
          {
            "name": "paging.limit",
            "description": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\n# Диапазон: 0..100.\n# По умолчанию: 20",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "paging.offset",
            "description": "Сдвиг.\n# Диапазон: 0..2147483647",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera/rtsp_url/external_id/{externalId}": {
      "get": {
        "summary": "Метод получения RTSP-ссылки по идентификатору камеры в vcfront.\nМетод доступен для: admin, service.\nМетод доступен для: ApiKey",
        "operationId": "CameraService_GetCameraRtspUrlExternalId",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraRtspUrlExternalIdResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraRtspUrlExternalIdResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraRtspUrlExternalIdResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "externalId",
            "description": "Идентификатор камеры в vcfront.\n# Тип: Guid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera/{data.cameraUid}/room/{data.orpon}/{data.roomNumber}/attach": {
      "put": {
        "summary": "Метод привязки камеры и квартиры.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraService_PutCameraRoomAttach",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomAttachResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomAttachResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomAttachResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "data.cameraUid",
            "description": "Идентификатор камеры",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "data.orpon",
            "description": "ОРПОН дома",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "int64"
            }
          },
          {
            "name": "data.roomNumber",
            "description": "Номер квартиры.\n# Диапазон: 1..4",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera/{data.cameraUid}/room/{data.orpon}/{data.roomNumber}/detach": {
      "put": {
        "summary": "Метод отвязки камеры и квартиры.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraService_PutCameraRoomDetach",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomDetachResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomDetachResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PutCameraRoomDetachResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "data.cameraUid",
            "description": "Идентификатор камеры",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "data.orpon",
            "description": "ОРПОН дома",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "int64"
            }
          },
          {
            "name": "data.roomNumber",
            "description": "Номер квартиры.\n# Диапазон: 1..4",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera/{uid}": {
      "get": {
        "summary": "Метод получения камеры.\nДля owner, employee параметр scope.vc_company_id подставляется из токена.\nМетод доступен для: admin, service, bti, ltp_first, owner, employee",
        "operationId": "CameraService_GetCamera",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "404": {
            "description": "Объект не найден"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "uid",
            "description": "uid камеры",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scope.vcCompanyId",
            "description": "Внешний идентификатор компании",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      },
      "delete": {
        "summary": "Метод удаления камеры.\nМетод доступен для: admin, service, bti",
        "operationId": "CameraService_DeleteCamera",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeleteCameraResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeleteCameraResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "404": {
            "description": "Объект не найден"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeleteCameraResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "uid",
            "description": "Идентификатор камеры в vcfront.\n# Тип: Guid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "isDeletePermanently",
            "description": "Флаг полного (безвозвратного) удаления камеры",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera_collection": {
      "post": {
        "summary": "Метод создания и изменения коллекции камер.\nПри изменении коллекции массив external_camera_ids заменяется полностью.\nДля owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraCollectionService_SaveCameraCollection",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1SaveCameraCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1SaveCameraCollectionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1SaveCameraCollectionResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1SaveCameraCollectionRequest"
              }
            }
          },
          "required": true
        },
        "tags": [
          "camera_collection(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ],
        "parameters": [
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ]
      }
    },
    "/vc/api/v1/camera_collection/count": {
      "get": {
        "summary": "Метод получения количества коллекций камер.\nДля owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraCollectionService_GetCameraCollectionCount",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraCollectionCountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraCollectionCountResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraCollectionCountResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter.text",
            "description": "По тексту.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование.\n# - Описание.\n# - Теги коллекции",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter.tags",
            "description": "По тегам.\nДиапазон: 0..10",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.companyIds",
            "description": "По компаниям.\nДиапазон: 0..10",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "int64"
              }
            }
          },
          {
            "name": "filter.isDeleted",
            "description": "Показывать удаленные.\nЕсли поле не передано, по умолчанию false, фильтр исключает удаленные",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera_collection(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera_collection/list": {
      "get": {
        "summary": "Метод получения списка коллекций камер.\nДля owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraCollectionService_GetCameraCollectionList",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "result": {
                      "$ref": "#/components/schemas/v1GetCameraCollectionListResponse"
                    },
                    "error": {
                      "$ref": "#/components/schemas/googlerpcStatus"
                    }
                  },
                  "title": "Поток объектов v1GetCameraCollectionListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка"
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter.text",
            "description": "По тексту.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование.\n# - Описание.\n# - Теги коллекции",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter.tags",
            "description": "По тегам.\nДиапазон: 0..10",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.companyIds",
            "description": "По компаниям.\nДиапазон: 0..10",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "int64"
              }
            }
          },
          {
            "name": "filter.isDeleted",
            "description": "Показывать удаленные.\nЕсли поле не передано, по умолчанию false, фильтр исключает удаленные",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "paging.orderByType",
            "description": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию.\nПо умолчанию: CHANGED_AT\n\n - ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - ID: По идентификатору\n - NAME: По имени\n - CHANGED_AT: По времени изменения",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ID",
                "NAME",
                "CHANGED_AT"
              ]
            }
          },
          {
            "name": "paging.directionType",
            "description": "Тип направления сортировки.\nПо умолчанию: DESC\n\n - DIRECTION_TYPE_UNKNOWN: Значение не указано\n - DESC: От большего к меньшему\n - ASC: От меньшего к большему",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "DESC",
                "ASC"
              ]
            }
          },
          {
            "name": "paging.limit",
            "description": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\nДиапазон: 0..100.\nПо умолчанию: 20",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "paging.offset",
            "description": "Сдвиг.\nДиапазон: 0..2147483647",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera_collection(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera_collection/restore/{id}": {
      "post": {
        "summary": "Метод восстановления удаленной коллекции камер.\nПроставляет null в поле deleted_at.\nДля owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraCollectionService_PostCameraCollectionRestore",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostCameraCollectionRestoreResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostCameraCollectionRestoreResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "404": {
            "description": "Объект не найден"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostCameraCollectionRestoreResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "Идентификатор коллекции камер.\nТип: Guid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera_collection(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera_collection/{id}": {
      "get": {
        "summary": "Метод получения коллекции камер.\nДля owner, employee возвращаются только коллекции камер c COMPANY_ID из токена.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraCollectionService_GetCameraCollection",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraCollectionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "404": {
            "description": "Объект не найден"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraCollectionResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "Идентификатор коллекции камер.\nТип: Guid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera_collection(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      },
      "delete": {
        "summary": "Метод удаления коллекции камер.\nПроставляет в поле deleted_at текущую дату.\nДля owner, employee сравнивается COMPANY_ID из токена и company_id коллекции, при несовпадении ошибка доступа.\nМетод доступен для: admin, service, bti, owner, employee",
        "operationId": "CameraCollectionService_DeleteCameraCollection",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeleteCameraCollectionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeleteCameraCollectionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "404": {
            "description": "Объект не найден"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeleteCameraCollectionResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "Идентификатор коллекции камер.\nТип: Guid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera_collection(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera_location_data/{uid}": {
      "get": {
        "summary": "Метод получения данных o местонахождении камеры.\nМетод доступен для: ApiKey",
        "operationId": "CameraLocationDataService_GetCameraLocationData",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraLocationDataResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraLocationDataResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "404": {
            "description": "Объект не найден"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraLocationDataResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "uid",
            "description": "uid видеопотока камеры",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera_location_data(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera_video_data/count": {
      "get": {
        "summary": "Метод получения количества камер.\nДля master это камеры, привязанные к пользователю, используем поля токена vc_user_id, user_id, company_id.\nДля owner, employee это камеры, привязанные к компании, используем поле токена company_id.\nДля admin, service, bti, ltp_first это камеры, привязанные к компании, используем поле scope.company_id.\nДля admin, service, bti, ltp_first это камеры, привязанные к пользователю, используем поле scope.user_id.\nМетод доступен для: admin, service, bti, ltp_first, master, owner, employee",
        "operationId": "CameraVideoDataService_GetCameraVideoDataCount",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraVideoDataCountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraVideoDataCountResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraVideoDataCountResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "scope.companyId",
            "description": "Идентификатор компании",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "int64"
            }
          },
          {
            "name": "scope.userId",
            "description": "Идентификатор пользователя",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "filter.uids",
            "description": "Идентификатор камеры в системе Видеокомфорт.\nТип: Guid",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.title",
            "description": "Наименование камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.mac",
            "description": "MAC-адрес камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.ip",
            "description": "IP камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.serialNumber",
            "description": "Серийный номер камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.category",
            "description": "Категория камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera_video_data(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/camera_video_data/list": {
      "get": {
        "summary": "Метод получения списка камер.\nДля master это камеры, привязанные к пользователю, используем поля токена vc_user_id, user_id, company_id.\nДля owner, employee это камеры, привязанные к компании, используем поле токена company_id.\nДля admin, service, bti, ltp_first это камеры, привязанные к компании, используем поле scope.company_id.\nДля admin, service, bti, ltp_first это камеры, привязанные к пользователю, используем поле scope.user_id.\nМетод доступен для: admin, service, bti, ltp_first, master, owner, employee",
        "operationId": "CameraVideoDataService_GetCameraVideoDataList",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraVideoDataListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraVideoDataListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCameraVideoDataListResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "scope.companyId",
            "description": "Идентификатор компании",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "int64"
            }
          },
          {
            "name": "scope.userId",
            "description": "Идентификатор пользователя",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "filter.uids",
            "description": "Идентификатор камеры в системе Видеокомфорт.\nТип: Guid",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.title",
            "description": "Наименование камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.mac",
            "description": "MAC-адрес камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.ip",
            "description": "IP камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.serialNumber",
            "description": "Серийный номер камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "filter.category",
            "description": "Категория камеры",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "paging.orderByType",
            "description": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию.\nПо умолчанию: UID\n\n - ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - CREATED_AT: По дате создания",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "CREATED_AT"
              ]
            }
          },
          {
            "name": "paging.directionType",
            "description": "Тип направления сортировки.\n# По умолчанию: DESC\n\n - DIRECTION_TYPE_UNKNOWN: Значение не указано\n - DESC: От большего к меньшему\n - ASC: От меньшего к большему",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "DESC",
                "ASC"
              ]
            }
          },
          {
            "name": "paging.limit",
            "description": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\n# Диапазон: 0..100.\n# По умолчанию: 20",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "paging.offset",
            "description": "Сдвиг.\n# Диапазон: 0..2147483647",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "camera_video_data(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:read",
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/vc/api/v1/company/{companyId}/impersonation": {
      "post": {
        "summary": "Метод генерации имперсонационной ссылки для владельца компании.\nВозвращает одноразовую ссылку для имперсонации в сервисе inkey-front.\nСценарий работы метода: https://confluence.rt.ru/pages/viewpage.action?pageId=1013775798.\nМетод доступен для: service, bti, admin",
        "operationId": "CompanyService_PostCompanyImpersonation",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostCompanyImpersonationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostCompanyImpersonationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostCompanyImpersonationResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/googlerpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "companyId",
            "description": "Идентификатор компании.\n# Диапазон: 1..2147483647",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "in": "header",
            "name": "X-Request-Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос"
          },
          {
            "in": "header",
            "name": "X-Device-Id",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный идентификатор устройства. Создаётся клиентом при первом запуске приложения. Если есть способ однозначно узнать идентификатор устройства, то создаётся на основе него и остаётся неизменным после переустановки приложения"
          },
          {
            "in": "header",
            "name": "X-Api-Key",
            "schema": {
              "type": "string"
            },
            "description": "Уникальный ключ для партнера. Создается администратором и передается партнерам."
          },
          {
            "in": "header",
            "name": "Canary",
            "schema": {
              "type": "string"
            },
            "description": "Параметр балансировки запроса. Если для заголовка запроса установлено значение always, он будет перенаправлен на канареечный деплой. Если для заголовка установлено значение never, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "title": "Запрос генерации имперсонационной ссылки для компании"
              }
            }
          },
          "required": true
        },
        "tags": [
          "company(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "vc:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "CameraCollectionSavingError": {
        "type": "object",
        "properties": {
          "conflict": {
            "title": "Конфликт версий",
            "allOf": [
              {
                "$ref": "#/components/schemas/SavingErrorConflict"
              }
            ]
          },
          "wrongCompanyId": {
            "title": "Попытка сохранить коллекцию камер с company_id не своей компании",
            "allOf": [
              {
                "$ref": "#/components/schemas/SavingErrorWrongCompanyId"
              }
            ]
          }
        },
        "title": "Ошибка сохранения"
      },
      "CameraLocationDataBuilding": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор дома"
          },
          "rfId": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор РФ"
          },
          "mrfId": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор МРФ"
          },
          "orpon": {
            "type": "string",
            "format": "int64",
            "title": "ОРПОН"
          },
          "city": {
            "type": "string",
            "title": "Город"
          },
          "street": {
            "type": "string",
            "title": "Улица"
          },
          "number": {
            "type": "string",
            "title": "Номер дома"
          },
          "part": {
            "type": "string",
            "title": "Корпус"
          },
          "companyId": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор компании"
          },
          "prefix": {
            "type": "string",
            "title": "Префикс"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата создания.\n# Тип: DateTime",
            "readOnly": true
          },
          "deletedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата удаления.\n# Тип: DateTime",
            "readOnly": true
          },
          "flatgrammId": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор квартирограммы"
          },
          "cityOrpon": {
            "type": "string",
            "format": "int64",
            "title": "ОРПОН города, в котором находится дом"
          },
          "fias": {
            "type": "string",
            "title": "Идентификатор в федеральной информационной адресной системе.\nТип: Guid"
          },
          "district": {
            "type": "string",
            "title": "Наименования района.\n# Диапазон: 0..200"
          },
          "unom": {
            "type": "string",
            "title": "Уникальный номер адреса.\n# Диапазон: 0..9999999999"
          },
          "regionOrpon": {
            "type": "string",
            "format": "int64",
            "title": "ОРПОН региона"
          }
        },
        "title": "Дом",
        "required": [
          "rfId",
          "mrfId",
          "orpon",
          "city",
          "street",
          "companyId",
          "flatgrammId"
        ]
      },
      "CameraLocationDataCompany": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор компании.\n# Диапазон: 1..2147483647"
          },
          "vcCompanyId": {
            "type": "string",
            "format": "int64",
            "title": "Идентификатор компании в системе Видеокомфорт"
          },
          "name": {
            "type": "string",
            "title": "Наименование компании"
          },
          "inn": {
            "type": "string",
            "title": "ИНН"
          },
          "kpp": {
            "type": "string",
            "title": "КПП"
          },
          "ogrn": {
            "type": "string",
            "title": "ОГРН"
          }
        },
        "title": "Компания"
      },
      "CameraLocationDataDeviceType": {
        "type": "string",
        "enum": [
          "INTERCOM",
          "VIDEOCAMERA",
          "BARRIER",
          "GATE",
          "ACCESS_CONTROL_PANEL",
          "OUTDOOR_CAMERA"
        ],
        "description": "- DEVICE_TYPE_UNKNOWN: Значение не указано\n - INTERCOM: Домофон\n - VIDEOCAMERA: Видеокамера\n - BARRIER: Шлагбаум\n - GATE: Калитка\n - ACCESS_CONTROL_PANEL: СКУД\n - OUTDOOR_CAMERA: Наружняя видеокамера",
        "title": "Тип устройства"
      },
      "CameraLocationDataStatusType": {
        "type": "string",
        "enum": [
          "OFFLINE",
          "ONLINE"
        ],
        "description": "- STATUS_TYPE_UNKNOWN: Значение не указано\n - OFFLINE: Не в сети\n - ONLINE: В сети",
        "title": "Справочник статусов устройства"
      },
      "CameraVideoDataCategory": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор группы"
          },
          "type": {
            "type": "string",
            "title": "Тип группы"
          },
          "title": {
            "type": "string",
            "title": "Имя группы"
          }
        },
        "title": "Категория камеры",
        "required": [
          "id",
          "type",
          "title"
        ]
      },
      "ErrorOwnerNotFound": {
        "type": "object",
        "title": "Владелец компании не найден"
      },
      "ErrorUserServiceError": {
        "type": "object",
        "title": "Ошибка взаимодействия с сервисом User"
      },
      "ErrorVcError": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "title": "Текст ошибки"
          }
        },
        "title": "Ошибка в сервисе ВН"
      },
      "ErrorVcfrontServiceError": {
        "type": "object",
        "title": "Ошибка взаимодействия с сервисом vcfront"
      },
      "GetCameraListResponseData": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v1Camera"
            },
            "title": "Список Camera"
          },
          "total": {
            "type": "integer",
            "format": "int32",
            "title": "Всего количество"
          }
        },
        "title": "Список"
      },
      "GetCameraRtspUrlExternalIdResponseCameraRtspUrl": {
        "type": "object",
        "properties": {
          "rtspUrl": {
            "type": "string",
            "title": "RTSP-ссылка"
          }
        },
        "title": "RTSP-ссылка"
      },
      "PostCompanyImpersonationResponseCompanyImpersonation": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "title": "Одноразовая ссылка для имперсонации"
          }
        },
        "title": "Имперсонационная ссылка",
        "required": [
          "url"
        ]
      },
      "SavingErrorConflict": {
        "type": "object",
        "title": "Конфликт версий.\nПричины:\n- В базе хранится другая версия строки, значения changed_at отличаются"
      },
      "SavingErrorWrongCompanyId": {
        "type": "object",
        "title": "Попытка сохранить коллекцию камер с company_id не своей компании.\nДля ролей owner, employee сохранение разрешено только с company_id своей компании"
      },
      "ValidationErrorOneFieldMacOrSerialNumberRequired": {
        "type": "object",
        "title": "Только одно поле обязательно к заполнению mac или serial_number.\nДля камер с типом VIOLET и DVR"
      },
      "ValidationErrorRtspUrlRequired": {
        "type": "object",
        "title": "Поле rtsp_url должно быть заполнено.\nТолько для камер с типом ROSE"
      },
      "googlerpcStatus": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/protobufAny"
            }
          }
        },
        "title": "Ошибка транспортного слоя в потоковом ответе"
      },
      "protobufAny": {
        "type": "object",
        "properties": {
          "@type": {
            "type": "string"
          }
        },
        "additionalProperties": {},
        "title": "Произвольный JSON"
      },
      "v1Camera": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "title": "Идентификатор камеры",
            "readOnly": true
          },
          "uid": {
            "type": "string",
            "title": "uid камеры",
            "readOnly": true
          },
          "name": {
            "type": "string",
            "title": "Название камеры",
            "readOnly": true
          },
          "isOnline": {
            "type": "boolean",
            "title": "Признак: онлайн камера или нет",
            "readOnly": true
          },
          "isActiveUserCamera": {
            "type": "boolean",
            "title": "Признак: Есть ли у камеры активный пользователь",
            "readOnly": true
          },
          "statusChangedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата и время изменения статуса камеры",
            "readOnly": true
          },
          "mac": {
            "type": "string",
            "title": "MAC-адрес камеры"
          },
          "ip": {
            "type": "string",
            "title": "IP камеры",
            "readOnly": true
          },
          "remoteIp": {
            "type": "string",
            "title": "Внешний IP камеры",
            "readOnly": true
          },
          "tariffStartedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата начала действия текущего тарифа",
            "readOnly": true
          },
          "tariffEndedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата окончания действия текущего тарифа",
            "readOnly": true
          },
          "tariffTitle": {
            "type": "string",
            "title": "Наименование тарифа",
            "readOnly": true
          },
          "type": {
            "title": "Тип камеры",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraType"
              }
            ]
          },
          "cameraCategoryId": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор категории.\nКамера - 1, домофон - 2, скуд - 3, шлагбаум - 4"
          },
          "rtspUrl": {
            "type": "string",
            "title": "РТСП-ссылка"
          },
          "serialNumber": {
            "type": "string",
            "title": "Серийный номер"
          },
          "companyId": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор компании"
          }
        },
        "title": "Камера"
      },
      "v1CameraCollection": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "title": "Идентификатор коллекции камер.\nТип: Guid"
          },
          "name": {
            "type": "string",
            "title": "Наименование.\nДиапазон: 3..256"
          },
          "changedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата изменения коллекции камер.\nПоле используется при редактировании и создании для контроля актуальности изменяемой версии"
          },
          "companyId": {
            "type": "string",
            "format": "int64",
            "title": "Идентификатор компании"
          },
          "deletedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата удаления коллекции камер.\nПоле изменяется через методы Delete и Restore",
            "readOnly": true
          },
          "description": {
            "type": "string",
            "title": "Описание.\nДиапазон: 0..256"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "Теги коллекции.\nДиапазон: 0..10"
          },
          "externalCameraIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "Привязанные к коллекции камеры"
          }
        },
        "title": "Коллекция камер",
        "required": [
          "name",
          "changedAt",
          "companyId"
        ]
      },
      "v1CameraCollectionFilter": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "title": "По тексту.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование.\n# - Описание.\n# - Теги коллекции"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "По тегам.\nДиапазон: 0..10"
          },
          "companyIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "int64"
            },
            "title": "По компаниям.\nДиапазон: 0..10"
          },
          "isDeleted": {
            "type": "boolean",
            "title": "Показывать удаленные.\nЕсли поле не передано, по умолчанию false, фильтр исключает удаленные"
          }
        },
        "title": "Фильтр коллекций камер"
      },
      "v1CameraCollectionPaging": {
        "type": "object",
        "properties": {
          "orderByType": {
            "title": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию.\nПо умолчанию: CHANGED_AT",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraCollectionPagingOrderByType"
              }
            ]
          },
          "directionType": {
            "title": "Тип направления сортировки.\nПо умолчанию: DESC",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraCollectionPagingDirectionType"
              }
            ]
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "title": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\nДиапазон: 0..100.\nПо умолчанию: 20"
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "title": "Сдвиг.\nДиапазон: 0..2147483647"
          }
        },
        "title": "Постраничный вывод"
      },
      "v1CameraCollectionPagingDirectionType": {
        "type": "string",
        "enum": [
          "DESC",
          "ASC"
        ],
        "description": "- DIRECTION_TYPE_UNKNOWN: Значение не указано\n - DESC: От большего к меньшему\n - ASC: От меньшего к большему",
        "title": "Справочник типов направлений сортировки.\nТип: byte"
      },
      "v1CameraCollectionPagingOrderByType": {
        "type": "string",
        "enum": [
          "ID",
          "NAME",
          "CHANGED_AT"
        ],
        "description": "- ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - ID: По идентификатору\n - NAME: По имени\n - CHANGED_AT: По времени изменения",
        "title": "Справочник типов значений сортировки.\nТип: byte"
      },
      "v1CameraFilter": {
        "type": "object",
        "properties": {
          "isActive": {
            "type": "boolean",
            "title": "Признак активности камеры"
          },
          "isChannelAlive": {
            "type": "boolean",
            "title": "Признак активности канала"
          },
          "isOnline": {
            "type": "boolean",
            "title": "Статус камеры"
          },
          "cameraType": {
            "title": "Тип камеры",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraType"
              }
            ]
          }
        },
        "title": "Фильтр камер"
      },
      "v1CameraLocationData": {
        "type": "object",
        "properties": {
          "uid": {
            "type": "string",
            "title": "Идентификатор видеопотока в системе Видеокомфорт.\nТип: Guid"
          },
          "deviceType": {
            "title": "Тип устройства.\n# Тип: byte",
            "allOf": [
              {
                "$ref": "#/components/schemas/CameraLocationDataDeviceType"
              }
            ]
          },
          "model": {
            "type": "string",
            "title": "Модель устройства"
          },
          "serialNumber": {
            "type": "string",
            "title": "Серийный номер устройства"
          },
          "hwVersion": {
            "type": "string",
            "title": "Версия аппаратного обеспечения"
          },
          "swVersion": {
            "type": "string",
            "title": "Версия программного обеспечения"
          },
          "mac": {
            "type": "string",
            "title": "MAC-адрес.\n# Диапазон: 17..17.\n# Паттерн: /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/"
          },
          "title": {
            "type": "string",
            "title": "Наименование устройства.\n# Диапазон: 3..256"
          },
          "host": {
            "type": "string",
            "title": "Сетевой адрес.\n# Диапазон: 0..250"
          },
          "statusType": {
            "title": "Статус устройства",
            "allOf": [
              {
                "$ref": "#/components/schemas/CameraLocationDataStatusType"
              }
            ]
          },
          "entranceNumbers": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "title": "Номер подъезда.\n# Диапазон: 1..100"
          },
          "flatgrammId": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор квартирограммы.\n# Диапазон: 1..2147483647"
          },
          "company": {
            "title": "Компания владелец устройства",
            "allOf": [
              {
                "$ref": "#/components/schemas/CameraLocationDataCompany"
              }
            ]
          },
          "buildings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CameraLocationDataBuilding"
            },
            "title": "Массив домов камеры"
          }
        },
        "title": "Данные o местонахождении камеры",
        "required": [
          "uid"
        ]
      },
      "v1CameraPaging": {
        "type": "object",
        "properties": {
          "orderByType": {
            "title": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraPagingOrderByType"
              }
            ]
          },
          "directionType": {
            "title": "Тип направления сортировки.\n# По умолчанию: DESC",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraPagingDirectionType"
              }
            ]
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "title": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\n# Диапазон: 0..100.\n# По умолчанию: 20"
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "title": "Сдвиг.\n# Диапазон: 0..2147483647"
          }
        },
        "title": "Постраничный вывод"
      },
      "v1CameraPagingDirectionType": {
        "type": "string",
        "enum": [
          "DESC",
          "ASC"
        ],
        "description": "- DIRECTION_TYPE_UNKNOWN: Значение не указано\n - DESC: От большего к меньшему\n - ASC: От меньшего к большему",
        "title": "Справочник типов направлений сортировки.\n# Тип: byte"
      },
      "v1CameraPagingOrderByType": {
        "type": "string",
        "enum": [
          "UID"
        ],
        "description": "- ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - UID: По идентификатору",
        "title": "Справочник типов значений сортировки.\n# Тип: byte"
      },
      "v1CameraRoom": {
        "type": "object",
        "properties": {
          "cameraUid": {
            "type": "string",
            "title": "Идентификатор камеры"
          },
          "orpon": {
            "type": "string",
            "format": "int64",
            "title": "ОРПОН дома"
          },
          "roomNumber": {
            "type": "string",
            "title": "Номер квартиры.\n# Диапазон: 1..4"
          }
        },
        "title": "Связь камеры и квартиры",
        "required": [
          "cameraUid",
          "orpon",
          "roomNumber"
        ]
      },
      "v1CameraRoomFilter": {
        "type": "object",
        "properties": {
          "cameraUids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "По Идентификаторам камер.\n# Диапазон: 0..100"
          },
          "orpons": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "int64"
            },
            "title": "По ОРПОНам.\n# Диапазон: 0..100"
          },
          "roomNumbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "По квартирам.\n# Диапазон: 0..100"
          }
        },
        "title": "Фильтр связок камеры и квартиры.\nПри передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.\nПри передаче нескольких разных параметров фильтра они работают в выборке через И"
      },
      "v1CameraRoomPaging": {
        "type": "object",
        "properties": {
          "orderByType": {
            "title": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию CAMERA_UID",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraRoomPagingOrderByType"
              }
            ]
          },
          "directionType": {
            "title": "Тип направления сортировки.\n# По умолчанию: DESC",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraRoomPagingDirectionType"
              }
            ]
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "title": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\n# Диапазон: 0..100.\n# По умолчанию: 20"
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "title": "Сдвиг.\n# Диапазон: 0..2147483647"
          }
        },
        "title": "Постраничный вывод"
      },
      "v1CameraRoomPagingDirectionType": {
        "type": "string",
        "enum": [
          "DESC",
          "ASC"
        ],
        "description": "- DIRECTION_TYPE_UNKNOWN: Значение не указано\n - DESC: От большего к меньшему\n - ASC: От меньшего к большему",
        "title": "Справочник типов направлений сортировки.\n# Тип: byte"
      },
      "v1CameraRoomPagingOrderByType": {
        "type": "string",
        "enum": [
          "CAMERA_UID",
          "ORPON_ROOM_NUMBER"
        ],
        "description": "- ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - CAMERA_UID: По Идентификатору камеры\n - ORPON_ROOM_NUMBER: По ОРПОН и номеру квартиры",
        "title": "Справочник типов значений сортировки.\n# Тип: byte"
      },
      "v1CameraScope": {
        "type": "object",
        "properties": {
          "vcCompanyId": {
            "type": "integer",
            "format": "int32",
            "title": "Внешний идентификатор компании"
          }
        },
        "title": "Ограничение выборки камер"
      },
      "v1CameraType": {
        "type": "string",
        "enum": [
          "DVR",
          "VMS",
          "ROSE",
          "VIOLET"
        ],
        "description": "- TYPE_UNKNOWN: Значение не указано\n - DVR: Регистратор\n - VMS: Система управления видео\n - ROSE: RTSP-камера\n - VIOLET: IP-камера",
        "title": "Справочник типов камер"
      },
      "v1CameraValidationError": {
        "type": "object",
        "properties": {
          "rtspUrlRequired": {
            "title": "Поле rtsp_url должно быть заполнено",
            "allOf": [
              {
                "$ref": "#/components/schemas/ValidationErrorRtspUrlRequired"
              }
            ]
          },
          "oneFieldMacOrSerialNumberRequired": {
            "title": "Только одно поле обязательно к заполнению mac или serial_number",
            "allOf": [
              {
                "$ref": "#/components/schemas/ValidationErrorOneFieldMacOrSerialNumberRequired"
              }
            ]
          }
        },
        "title": "Ошибки валидации"
      },
      "v1CameraVideoData": {
        "type": "object",
        "properties": {
          "uid": {
            "type": "string",
            "title": "Идентификатор камеры в системе Видеокомфорт.\nТип: Guid"
          },
          "category": {
            "title": "Категория камеры",
            "allOf": [
              {
                "$ref": "#/components/schemas/CameraVideoDataCategory"
              }
            ]
          },
          "title": {
            "type": "string",
            "title": "Наименование камеры"
          },
          "serialNumber": {
            "type": "string",
            "title": "Серийный номер камеры"
          },
          "ip": {
            "type": "string",
            "title": "IP камеры"
          },
          "streamerUrl": {
            "type": "string",
            "title": "Адрес видео-потока (https соединение)"
          },
          "mac": {
            "type": "string",
            "title": "MAC-адрес камеры"
          },
          "model": {
            "type": "string",
            "title": "Модель камеры"
          },
          "vendor": {
            "type": "string",
            "title": "Производитель камеры"
          },
          "status": {
            "title": "Статус камеры",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraVideoDataStatus"
              }
            ]
          },
          "screenshotUrlTemplate": {
            "type": "string",
            "title": "URL скриншотов разных размеров в JPG-формате"
          },
          "screenshotPreciseUrlTemplate": {
            "type": "string",
            "title": "Шаблон для “точных” скриншотов. Выдаёт скриншоты всех размеров"
          },
          "userToken": {
            "type": "string",
            "title": "U-Токен, кука, которая выдается Умному Дому"
          },
          "streamerToken": {
            "type": "string",
            "title": "Токен для воспроизведения видео с камеры"
          },
          "screenshotToken": {
            "type": "string",
            "title": "Токен для получения контента с cdn (например, файлов изображений)"
          },
          "archiveLength": {
            "type": "integer",
            "format": "int32",
            "title": "Глубина хранения видео в минутах"
          },
          "location": {
            "title": "Координаты месторасположения",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraVideoDataLocation"
              }
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата создания",
            "readOnly": true
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата обновления",
            "readOnly": true
          },
          "utcOffset": {
            "type": "integer",
            "format": "int32",
            "title": "Смещение таймзоны в минутах.\n# Диапазон: -720..840"
          }
        },
        "title": "Камера",
        "required": [
          "uid",
          "title",
          "serialNumber",
          "ip",
          "streamerUrl",
          "mac",
          "status",
          "screenshotUrlTemplate",
          "screenshotPreciseUrlTemplate",
          "userToken",
          "streamerToken",
          "screenshotToken"
        ]
      },
      "v1CameraVideoDataFilter": {
        "type": "object",
        "properties": {
          "uids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "Идентификатор камеры в системе Видеокомфорт.\nТип: Guid"
          },
          "title": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "Наименование камеры"
          },
          "mac": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "MAC-адрес камеры"
          },
          "ip": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "IP камеры"
          },
          "serialNumber": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "Серийный номер камеры"
          },
          "category": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "Категория камеры"
          }
        },
        "title": "Фильтр камер"
      },
      "v1CameraVideoDataLocation": {
        "type": "object",
        "properties": {
          "lat": {
            "type": "number",
            "format": "double",
            "title": "Широта"
          },
          "lng": {
            "type": "number",
            "format": "double",
            "title": "Долгота"
          }
        },
        "title": "Координаты месторасположения",
        "required": [
          "lat",
          "lng"
        ]
      },
      "v1CameraVideoDataPaging": {
        "type": "object",
        "properties": {
          "orderByType": {
            "title": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию.\nПо умолчанию: UID",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraVideoDataPagingOrderByType"
              }
            ]
          },
          "directionType": {
            "title": "Тип направления сортировки.\n# По умолчанию: DESC",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraVideoDataPagingDirectionType"
              }
            ]
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "title": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\n# Диапазон: 0..100.\n# По умолчанию: 20"
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "title": "Сдвиг.\n# Диапазон: 0..2147483647"
          }
        },
        "title": "Постраничный вывод"
      },
      "v1CameraVideoDataPagingDirectionType": {
        "type": "string",
        "enum": [
          "DESC",
          "ASC"
        ],
        "description": "- DIRECTION_TYPE_UNKNOWN: Значение не указано\n - DESC: От большего к меньшему\n - ASC: От меньшего к большему",
        "title": "Справочник типов направлений сортировки.\n# Тип: byte"
      },
      "v1CameraVideoDataPagingOrderByType": {
        "type": "string",
        "enum": [
          "CREATED_AT"
        ],
        "description": "- ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - CREATED_AT: По дате создания",
        "title": "Справочник типов значений сортировки.\n# Тип: byte"
      },
      "v1CameraVideoDataScope": {
        "type": "object",
        "properties": {
          "companyId": {
            "type": "string",
            "format": "int64",
            "title": "Идентификатор компании"
          },
          "userId": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор пользователя"
          }
        },
        "title": "Ограничение выборки камер"
      },
      "v1CameraVideoDataStatus": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор статуса"
          },
          "type": {
            "type": "string",
            "title": "online/offline"
          },
          "title": {
            "type": "string",
            "title": "Доступна/Не доступна"
          }
        },
        "title": "Статус камеры",
        "required": [
          "id",
          "type",
          "title"
        ]
      },
      "v1DeleteCameraCollectionResponse": {
        "type": "object",
        "properties": {
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1DeleteCameraCollectionResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос удаления коллекции камер"
      },
      "v1DeleteCameraCollectionResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1DeleteCameraResponse": {
        "type": "object",
        "properties": {
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1DeleteCameraResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос удаления камеры"
      },
      "v1DeleteCameraResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraCollectionCountResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "integer",
            "format": "int32",
            "title": "Всего"
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraCollectionCountResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос получения количества коллекций камер"
      },
      "v1GetCameraCollectionCountResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraCollectionListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Коллекция камер",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraCollection"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraCollectionListResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос получения списка коллекций камер"
      },
      "v1GetCameraCollectionListResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraCollectionResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Коллекция камер",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraCollection"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraCollectionResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос получения коллекции камер"
      },
      "v1GetCameraCollectionResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Список",
            "allOf": [
              {
                "$ref": "#/components/schemas/GetCameraListResponseData"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraListResponseError"
              }
            ]
          }
        },
        "title": "Ответ на получение списка камер"
      },
      "v1GetCameraListResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraLocationDataResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Данные o местонахождении камеры",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraLocationData"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraLocationDataResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос на получение данных o местонахождении камеры"
      },
      "v1GetCameraLocationDataResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Камера",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1Camera"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос получения камеры"
      },
      "v1GetCameraResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraRoomCountResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "integer",
            "format": "int32",
            "title": "Всего количество"
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraRoomCountResponseError"
              }
            ]
          }
        },
        "title": "Ответ получения количества связей камеры и квартиры"
      },
      "v1GetCameraRoomCountResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraRoomListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Связь камеры и квартиры",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraRoom"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraRoomListResponseError"
              }
            ]
          }
        },
        "title": "Ответ получения списка связей камеры и квартиры"
      },
      "v1GetCameraRoomListResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraRtspUrlExternalIdResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "RTSP-ссылка",
            "allOf": [
              {
                "$ref": "#/components/schemas/GetCameraRtspUrlExternalIdResponseCameraRtspUrl"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraRtspUrlExternalIdResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос получения RTSP-ссылки по идентификатору камеры в vcfront"
      },
      "v1GetCameraRtspUrlExternalIdResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса получения списка камер"
      },
      "v1GetCameraVideoDataCountResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "integer",
            "format": "int32",
            "title": "Всего количество"
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraVideoDataCountResponseError"
              }
            ]
          }
        },
        "title": "Ответ на получение количества камер"
      },
      "v1GetCameraVideoDataCountResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1GetCameraVideoDataListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v1CameraVideoData"
            },
            "title": "Камера"
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetCameraVideoDataListResponseError"
              }
            ]
          }
        },
        "title": "Ответ на получение списка камер"
      },
      "v1GetCameraVideoDataListResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1PostCameraCollectionRestoreResponse": {
        "type": "object",
        "properties": {
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1PostCameraCollectionRestoreResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос восстановления удаленной коллекции камер"
      },
      "v1PostCameraCollectionRestoreResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1PostCameraRequest": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Камера",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1Camera"
              }
            ]
          }
        },
        "title": "Запрос создания камеры",
        "required": [
          "data"
        ]
      },
      "v1PostCameraResponse": {
        "type": "object",
        "properties": {
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1PostCameraResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос создания камеры"
      },
      "v1PostCameraResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          },
          "cameraValidation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraValidationError"
              }
            ]
          },
          "vc": {
            "title": "Ошибка в сервисе ВН",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorVcError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1PostCompanyImpersonationResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Имперсонационная ссылка",
            "allOf": [
              {
                "$ref": "#/components/schemas/PostCompanyImpersonationResponseCompanyImpersonation"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1PostCompanyImpersonationResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос генерации имперсонационной ссылки для компании"
      },
      "v1PostCompanyImpersonationResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          },
          "ownerNotFound": {
            "title": "Владелец компании не найден",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorOwnerNotFound"
              }
            ]
          },
          "userServiceError": {
            "title": "Ошибка взаимодействия с сервисом User",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorUserServiceError"
              }
            ]
          },
          "vcfrontServiceError": {
            "title": "Ошибка взаимодействия с сервисом vcfront",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorVcfrontServiceError"
              }
            ]
          }
        },
        "title": "Ошибка генерации имперсонационной ссылки для компании"
      },
      "v1PutCameraRoomAttachListRequest": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v1CameraRoom"
            },
            "title": "Массив связей Camera и Room"
          }
        },
        "title": "Запрос пакетной привязки камер и квартир"
      },
      "v1PutCameraRoomAttachListResponse": {
        "type": "object",
        "properties": {
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1PutCameraRoomAttachListResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос пакетной привязки камер и квартир"
      },
      "v1PutCameraRoomAttachListResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1PutCameraRoomAttachResponse": {
        "type": "object",
        "properties": {
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1PutCameraRoomAttachResponseError"
              }
            ]
          }
        },
        "title": "Ответ привязки камеры и квартиры"
      },
      "v1PutCameraRoomAttachResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1PutCameraRoomDetachListRequest": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/v1CameraRoom"
            },
            "title": "Массив связей Camera и Room"
          }
        },
        "title": "Запрос пакетной отвязки камер и квартир"
      },
      "v1PutCameraRoomDetachListResponse": {
        "type": "object",
        "properties": {
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1PutCameraRoomDetachListResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос пакетной отвязки камер и квартир"
      },
      "v1PutCameraRoomDetachListResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1PutCameraRoomDetachResponse": {
        "type": "object",
        "properties": {
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1PutCameraRoomDetachResponseError"
              }
            ]
          }
        },
        "title": "Ответ отвязки камеры и квартиры"
      },
      "v1PutCameraRoomDetachResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса"
      },
      "v1SaveCameraCollectionRequest": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Коллекция камер",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraCollection"
              }
            ]
          }
        },
        "title": "Запрос на создание коллекции камер",
        "required": [
          "data"
        ]
      },
      "v1SaveCameraCollectionResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Коллекция камер",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1CameraCollection"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1SaveCameraCollectionResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос на создание коллекции камер"
      },
      "v1SaveCameraCollectionResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/vcv1ValidationError"
              }
            ]
          },
          "saving": {
            "title": "Ошибка сохранения",
            "allOf": [
              {
                "$ref": "#/components/schemas/CameraCollectionSavingError"
              }
            ]
          }
        },
        "title": "Ошибка запроса создания"
      },
      "vcv1ValidationError": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "title": "Путь к полю в формате наименования прото"
          },
          "message": {
            "type": "string",
            "title": "Валидационное сообщение"
          }
        },
        "title": "Ошибки валидации.\nЭти проверки выполняются до обращения в базу данных",
        "required": [
          "path",
          "message"
        ]
      }
    },
    "securitySchemes": {
      "bearerHttp": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "oauth2": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://oauth2-staging.k8s.key.rt.ru/oauth2/token",
            "scopes": {
              "vc:edit": "Предоставляет полный доступ в сервис vc",
              "vc:read": "Предоставляет доступ на чтение данных из сервиса vc"
            }
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://keyapis-staging.k8s.key.rt.ru",
      "description": "staging"
    },
    {
      "url": "https://{feature}.k8s.key.rt.ru/",
      "description": "https feature",
      "variables": {
        "feature": {
          "default": "",
          "description": "Feature name"
        }
      }
    },
    {
      "url": "http://{feature}.k8s.key.rt.ru/",
      "description": "http feature",
      "variables": {
        "feature": {
          "default": "",
          "description": "Feature name"
        }
      }
    },
    {
      "url": "https://localhost:3001",
      "description": "localhost"
    },
    {
      "url": "https://keyapis.key.rt.ru",
      "description": "production"
    }
  ]
}