{
  "openapi": "3.0.3",
  "info": {
    "title": "preset",
    "version": "1.0.1775813760260",
    "description": "Сервис preset",
    "license": {
      "name": "CC BY-NC-ND 4.0",
      "url": "https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md"
    }
  },
  "tags": [
    {
      "name": "event(auth)",
      "description": "Методы event. Требуют авторизацию. Доступны из интернета"
    },
    {
      "name": "preset(auth)",
      "description": "Методы preset. Требуют авторизацию. Доступны из интернета"
    },
    {
      "name": "system(public)",
      "description": "Методы system. Не требуют авторизацию. Доступны из интернета"
    }
  ],
  "paths": {
    "/preset/api/v1/event/preset/{id}/install": {
      "post": {
        "summary": "Метод установки пресета.\nМетод доступен для: admin, service",
        "operationId": "EventService_PostEventPresetInstall",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostEventPresetInstallResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка"
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "404": {
            "description": "Объект не найден"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "Идентификатор пресета",
            "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, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "event(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "preset:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/preset/api/v1/preset": {
      "post": {
        "summary": "Метод сохранения пресетов.\nПоддерживает создание и обновление.\nПри обновлении пресета посылается задача PresetInstallTask в очередь key.preset.install.\nДанное сообщение должно отправляться только если изменению подверглось одно из следующих полей:\n- Sip;\n- Ntp;\n- Syslog;\n- Room;\n- VideoConfig;\n- Dtmf.\nМетод доступен для: admin, service",
        "operationId": "PresetService_PostPreset",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostPresetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostPresetResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "409": {
            "description": "В базе данных хранится более новая версия объекта"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1PostPresetResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1PostPresetRequest"
              }
            }
          },
          "required": true
        },
        "tags": [
          "preset(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "preset: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, он никогда не будет перенаправлен на канареечный деплой"
          }
        ]
      }
    },
    "/preset/api/v1/preset/count": {
      "get": {
        "summary": "Метод получения количества пресетов.\nМетод доступен для: admin, service, bti, ltp_first, owner, employee",
        "operationId": "PresetService_GetPresetCount",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetPresetCountResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetPresetCountResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetPresetCountResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter.mrfIds",
            "description": "По идентификаторам МРФ",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "filter.rfIds",
            "description": "По идентификаторам РФ",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "filter.text",
            "description": "Поиск по тексту.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование;\n# - Описание",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter.title",
            "description": "Поиск по наименованию.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter.statusTypes",
            "description": "По статусам\n\n - STATUS_TYPE_UNKNOWN: Значение не указано\n - ACTIVE: Активный\n - ARCHIVE: Архивный",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "ARCHIVE"
                ]
              }
            }
          },
          {
            "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": [
          "preset(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "preset:read",
              "preset:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/preset/api/v1/preset/default": {
      "get": {
        "summary": "Метод получения дефолтного пресета.\nМетод доступен для: admin, service, bti, ltp_first, owner, employee",
        "operationId": "PresetService_GetPresetDefault",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetPresetDefaultResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка"
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            }
          }
        },
        "tags": [
          "preset(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "preset:read",
              "preset: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, он никогда не будет перенаправлен на канареечный деплой"
          }
        ]
      }
    },
    "/preset/api/v1/preset/list": {
      "get": {
        "summary": "Метод получения пресетов.\nМетод доступен для: admin, service, bti, ltp_first, owner, employee",
        "operationId": "PresetService_GetPresetList",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "result": {
                      "$ref": "#/components/schemas/v1GetPresetListResponse"
                    },
                    "error": {
                      "$ref": "#/components/schemas/rpcStatus"
                    }
                  },
                  "title": "Поток объектов v1GetPresetListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка"
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "filter.mrfIds",
            "description": "По идентификаторам МРФ",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "filter.rfIds",
            "description": "По идентификаторам РФ",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          },
          {
            "name": "filter.text",
            "description": "Поиск по тексту.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование;\n# - Описание",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter.title",
            "description": "Поиск по наименованию.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter.statusTypes",
            "description": "По статусам\n\n - STATUS_TYPE_UNKNOWN: Значение не указано\n - ACTIVE: Активный\n - ARCHIVE: Архивный",
            "in": "query",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "ARCHIVE"
                ]
              }
            }
          },
          {
            "name": "paging.orderByType",
            "description": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию.\n# По умолчанию: CHANGED_AT\n\n - ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - ID: По идентификатору\n - CREATED_AT: По времени создания\n - CHANGED_AT: По времени изменения\n - RANK: По рангу для поиска по тексту.\nПрименяется когда передано поле для поиска по тексту.\nВ случае если текстовое поле не передано, применяется значение по умолчанию",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ID",
                "CREATED_AT",
                "CHANGED_AT",
                "RANK"
              ]
            }
          },
          {
            "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": [
          "preset(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "preset:read",
              "preset:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/preset/api/v1/preset/{id}": {
      "get": {
        "summary": "Метод получения пресета по идентификатору.\nМетод доступен для: admin, service, bti, ltp_first, owner, employee",
        "operationId": "PresetService_GetPreset",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetPresetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка"
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "404": {
            "description": "Объект не найден"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "Идентификатор",
            "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, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "preset(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "preset:read",
              "preset:edit"
            ],
            "bearerHttp": []
          }
        ]
      },
      "delete": {
        "summary": "Метод удаления пресета.\nНельзя удалить пресет, если он используется на устройстве.\nНельзя удалить дефолтный пресет.\nМетод доступен для: admin, service",
        "operationId": "PresetService_DeletePreset",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeletePresetResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeletePresetResponse"
                }
              }
            }
          },
          "401": {
            "description": "Запрос не авторизован"
          },
          "403": {
            "description": "В доступе отказано"
          },
          "404": {
            "description": "Объект не найден"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeletePresetResponse"
                }
              }
            }
          },
          "default": {
            "description": "Ошибки транспортного слоя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "description": "Идентификатор пресета",
            "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, он никогда не будет перенаправлен на канареечный деплой"
          }
        ],
        "tags": [
          "preset(auth)"
        ],
        "security": [
          {
            "oauth2": [
              "preset:edit"
            ],
            "bearerHttp": []
          }
        ]
      }
    },
    "/preset/api/v1/system/status": {
      "get": {
        "summary": "Метод получения статуса сервиса.\nНе требует авторизации",
        "operationId": "SystemService_GetSystemStatus",
        "responses": {
          "200": {
            "description": "Успешный ответ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetSystemStatusResponse"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка"
          },
          "500": {
            "description": "Внутренняя ошибка сервиса",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            }
          }
        },
        "tags": [
          "system(public)"
        ],
        "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, он никогда не будет перенаправлен на канареечный деплой"
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "DeletePresetResponseErrorNotAllowedForDefault": {
        "type": "object",
        "title": "Недоступно для дефолтного пресета"
      },
      "FaceRecognitionConfigurationType": {
        "type": "string",
        "enum": [
          "DEFAULT"
        ],
        "description": "- CONFIGURATION_TYPE_UNKNOWN: Значение не указано\n - DEFAULT: По умолчанию",
        "title": "Тип конфигурации"
      },
      "PresetDtmf": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "title": "Код.\n# Диапазон: 1..1"
          },
          "relayIndex": {
            "type": "integer",
            "format": "int32",
            "title": "Индекс реле.\n# Диапазон: 0..64"
          }
        },
        "title": "Параметр DTMF",
        "required": [
          "code"
        ]
      },
      "PresetFaceRecognition": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string",
            "title": "Адрес"
          },
          "altHost": {
            "type": "string",
            "title": "Альтернативный адрес"
          },
          "endpoint": {
            "type": "string",
            "title": "Путь запроса к серверу"
          },
          "authToken": {
            "type": "string",
            "title": "Токен"
          },
          "configurationType": {
            "title": "Тип конфигурации",
            "allOf": [
              {
                "$ref": "#/components/schemas/FaceRecognitionConfigurationType"
              }
            ]
          },
          "originId": {
            "type": "string",
            "title": "Идентификатор источника в identix"
          },
          "groupIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "title": "Идентификаторы групп профилей в identix"
          }
        },
        "title": "Распознование лиц",
        "required": [
          "host",
          "endpoint",
          "authToken",
          "configurationType",
          "originId"
        ]
      },
      "PresetNtp": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string",
            "title": "Хост.\n# Диапазон: 5..256"
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "title": "Порт.\n# Диапазон: 1..65536"
          }
        },
        "title": "Параметр NTP",
        "required": [
          "host",
          "port"
        ]
      },
      "PresetPagingDirectionType": {
        "type": "string",
        "enum": [
          "DESC",
          "ASC"
        ],
        "description": "- DIRECTION_TYPE_UNKNOWN: Значение не указано\n - DESC: От большего к меньшему\n - ASC: От меньшего к большему",
        "title": "Справочник типов направлений сортировки.\n# Тип: byte"
      },
      "PresetPagingOrderByType": {
        "type": "string",
        "enum": [
          "ID",
          "CREATED_AT",
          "CHANGED_AT",
          "RANK"
        ],
        "description": "- ORDER_BY_TYPE_UNKNOWN: Значение не указано\n - ID: По идентификатору\n - CREATED_AT: По времени создания\n - CHANGED_AT: По времени изменения\n - RANK: По рангу для поиска по тексту.\nПрименяется когда передано поле для поиска по тексту.\nВ случае если текстовое поле не передано, применяется значение по умолчанию",
        "title": "Справочник типов значений сортировки.\n# Тип: byte"
      },
      "PresetRoom": {
        "type": "object",
        "properties": {
          "phone": {
            "type": "string",
            "title": "Номер телефона.\n# Диапазон: 5..14"
          },
          "num": {
            "type": "integer",
            "format": "int32",
            "title": "Номер помещения.\n# Диапазон: 1..10000"
          }
        },
        "title": "Помещение",
        "required": [
          "phone",
          "num"
        ]
      },
      "PresetSavingError": {
        "type": "object",
        "properties": {
          "conflict": {
            "title": "Конфликт версий",
            "allOf": [
              {
                "$ref": "#/components/schemas/SavingErrorConflict"
              }
            ]
          },
          "notAllowedForDefault": {
            "title": "Запрещено для дефолтного пресета",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetSavingErrorNotAllowedForDefault"
              }
            ]
          }
        },
        "title": "Ошибка сохранения.\nЭти проверки выполняются при работе с базой данных и сторонними сервисами"
      },
      "PresetSavingErrorNotAllowedForDefault": {
        "type": "object",
        "title": "Недоступно для дефолтного пресета.\nПричины:\n- Смена статуса на Архивный"
      },
      "PresetSip": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string",
            "title": "Хост.\n# Диапазон: 5..256"
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "title": "Порт.\n# Диапазон: 1..65536"
          },
          "regHost": {
            "type": "string",
            "title": "Хост reg.\n# Диапазон: 5..256"
          },
          "regPort": {
            "type": "integer",
            "format": "int32",
            "title": "Порт reg.\n# Диапазон: 1..65536"
          },
          "proxyHost": {
            "type": "string",
            "title": "Хост proxy.\n# Диапазон: 5..256"
          },
          "proxyPort": {
            "type": "integer",
            "format": "int32",
            "title": "Порт proxy.\n# Диапазон: 1..65536"
          }
        },
        "title": "Параметр SIP",
        "required": [
          "host",
          "port",
          "regHost",
          "regPort",
          "proxyHost",
          "proxyPort"
        ]
      },
      "PresetStatusType": {
        "type": "string",
        "enum": [
          "ACTIVE",
          "ARCHIVE"
        ],
        "description": "- STATUS_TYPE_UNKNOWN: Значение не указано\n - ACTIVE: Активный\n - ARCHIVE: Архивный",
        "title": "Справочник статусов.\n# Тип: byte"
      },
      "PresetSyslog": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string",
            "title": "Хост.\n# Диапазон: 5..256"
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "title": "Порт.\n# Диапазон: 1..65536"
          },
          "protocolType": {
            "title": "Протокол",
            "allOf": [
              {
                "$ref": "#/components/schemas/SyslogProtocolType"
              }
            ]
          }
        },
        "title": "Параметр Syslog",
        "required": [
          "host",
          "port",
          "protocolType"
        ]
      },
      "PresetVideoConfig": {
        "type": "object",
        "properties": {
          "qualityType": {
            "title": "Тип пресета",
            "allOf": [
              {
                "$ref": "#/components/schemas/VideoConfigQualityType"
              }
            ]
          },
          "rtspUser": {
            "title": "Пользователь",
            "allOf": [
              {
                "$ref": "#/components/schemas/VideoConfigRtspUser"
              }
            ]
          }
        },
        "title": "Параметры конфигурации видео",
        "required": [
          "qualityType",
          "rtspUser"
        ]
      },
      "SavingErrorConflict": {
        "type": "object",
        "title": "Конфликт версий.\nПричины:\n- В базе хранится другая версия строки, значения changed_at отличаются"
      },
      "SyslogProtocolType": {
        "type": "string",
        "enum": [
          "UDP",
          "TCP"
        ],
        "description": "- PROTOCOL_TYPE_UNKNOWN: Значение не указано\n - UDP: Протокол UDP\n - TCP: Протокол TCP",
        "title": "Тип протокола.\n# Тип: byte"
      },
      "VideoConfigQualityType": {
        "type": "string",
        "enum": [
          "HIGH",
          "MEDIUM"
        ],
        "description": "- QUALITY_TYPE_UNKNOWN: Значение не указано\n - HIGH: Высокое качество\n - MEDIUM: Среднее качество",
        "title": "Справочник качеств.\n# Тип: byte"
      },
      "VideoConfigRtspUser": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "title": "Имя пользователя.\n# Диапазон: 3..256"
          },
          "password": {
            "type": "string",
            "title": "Пароль.\n# Диапазон: 3..256"
          }
        },
        "title": "Пользователь",
        "required": [
          "username",
          "password"
        ]
      },
      "protobufAny": {
        "type": "object",
        "properties": {
          "@type": {
            "type": "string"
          }
        },
        "additionalProperties": {},
        "title": "Произвольный JSON"
      },
      "rpcStatus": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/protobufAny"
            }
          }
        },
        "title": "Ошибка транспортного слоя"
      },
      "v1DeletePresetResponse": {
        "type": "object",
        "properties": {
          "error": {
            "title": "Ошибка при удалении",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1DeletePresetResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос удаления пресета"
      },
      "v1DeletePresetResponseError": {
        "type": "object",
        "properties": {
          "notAllowedForDefault": {
            "title": "Запрещено для дефолтного пресета",
            "allOf": [
              {
                "$ref": "#/components/schemas/DeletePresetResponseErrorNotAllowedForDefault"
              }
            ]
          }
        },
        "title": "Ошибка при удалении"
      },
      "v1GetPresetCountResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "integer",
            "format": "int32",
            "title": "Всего пресетов"
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetPresetCountResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос получения количества пресетов"
      },
      "v1GetPresetCountResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса получения количества пресетов"
      },
      "v1GetPresetDefaultResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Пресет",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1Preset"
              }
            ]
          }
        },
        "title": "Ответ на запрос получения дефолтного пресета"
      },
      "v1GetPresetListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Пресет",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1Preset"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1GetPresetListResponseError"
              }
            ]
          }
        },
        "title": "Ответ на получение списка пресетов"
      },
      "v1GetPresetListResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1ValidationError"
              }
            ]
          }
        },
        "title": "Ошибка запроса получения списка пресетов"
      },
      "v1GetPresetResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Пресет",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1Preset"
              }
            ]
          }
        },
        "title": "Ответ на запрос получения пресета"
      },
      "v1GetSystemStatusResponse": {
        "type": "object",
        "title": "Ответ на запрос проверки доступности сервиса"
      },
      "v1PostEventPresetInstallResponse": {
        "type": "object",
        "title": "Ответ на запрос на установку пресета"
      },
      "v1PostPresetRequest": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Пресет",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1Preset"
              }
            ]
          }
        },
        "title": "Запрос на создание/изменение пресета",
        "required": [
          "data"
        ]
      },
      "v1PostPresetResponse": {
        "type": "object",
        "properties": {
          "data": {
            "title": "Пресет",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1Preset"
              }
            ]
          },
          "error": {
            "title": "Ошибка",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1PostPresetResponseError"
              }
            ]
          }
        },
        "title": "Ответ на запрос на создание/изменение пресета"
      },
      "v1PostPresetResponseError": {
        "type": "object",
        "properties": {
          "validation": {
            "title": "Ошибка валидации",
            "allOf": [
              {
                "$ref": "#/components/schemas/v1ValidationError"
              }
            ]
          },
          "saving": {
            "title": "Ошибка сохранения",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetSavingError"
              }
            ]
          }
        },
        "title": "Ошибка запроса сохранения пресета"
      },
      "v1Preset": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32",
            "title": "Идентификатор.\n# Диапазон: 0..2147483647"
          },
          "title": {
            "type": "string",
            "title": "Наименование.\n# Диапазон: 3..256"
          },
          "mrfIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "title": "Идентификатор МРФ.\n# Диапазон: 0..10"
          },
          "rfIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "title": "Идентификатор РФ.\n# Диапазон: 0..100"
          },
          "description": {
            "type": "string",
            "title": "Описание.\n# Диапазон: 3..1024"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата и время создания.\n# Тип: DateTime",
            "readOnly": true
          },
          "changedAt": {
            "type": "string",
            "format": "date-time",
            "title": "Дата последнего изменения.\nЗаполняется и обновляется сервером.\nЗаполняется при создании и изменении.\nЯвляется версией объекта.\n# Тип: DateTime",
            "readOnly": true
          },
          "statusType": {
            "title": "Статус",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetStatusType"
              }
            ]
          },
          "sip": {
            "title": "Параметр SIP",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetSip"
              }
            ]
          },
          "ntp": {
            "title": "Параметр NTP",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetNtp"
              }
            ]
          },
          "syslog": {
            "title": "Параметр Syslog",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetSyslog"
              }
            ]
          },
          "rooms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PresetRoom"
            },
            "title": "Помещения.\n# Диапазон: 0..10000"
          },
          "videoConfig": {
            "title": "Параметры конфигурации видео",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetVideoConfig"
              }
            ]
          },
          "dtmf": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PresetDtmf"
            },
            "title": "Параметр DTMF.\n# Диапазон: 0..64"
          },
          "faceRecognition": {
            "title": "Распознование лиц",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetFaceRecognition"
              }
            ]
          }
        },
        "title": "Пресет.\nПресет с id=1 является дефолтным пресетом.\n# Описание модели",
        "required": [
          "title",
          "mrfIds",
          "rfIds",
          "statusType",
          "sip",
          "ntp",
          "syslog",
          "rooms",
          "videoConfig",
          "dtmf"
        ]
      },
      "v1PresetFilter": {
        "type": "object",
        "properties": {
          "mrfIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "title": "По идентификаторам МРФ"
          },
          "rfIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "title": "По идентификаторам РФ"
          },
          "text": {
            "type": "string",
            "title": "Поиск по тексту.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование;\n# - Описание"
          },
          "title": {
            "type": "string",
            "title": "Поиск по наименованию.\nЕсли значение не передано то поиск по нему не производится.\n# Диапазон: 3..64.\n# Поиск производится по полям:\n# - Наименование"
          },
          "statusTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PresetStatusType"
            },
            "title": "По статусам"
          }
        },
        "title": "Фильтр по пресетам"
      },
      "v1PresetPaging": {
        "type": "object",
        "properties": {
          "orderByType": {
            "title": "Тип значения сортировки.\nЕсли значение не передано, то будет взято значение по умолчанию.\n# По умолчанию: CHANGED_AT",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetPagingOrderByType"
              }
            ]
          },
          "directionType": {
            "title": "Тип направления сортировки.\n# По умолчанию: DESC",
            "allOf": [
              {
                "$ref": "#/components/schemas/PresetPagingDirectionType"
              }
            ]
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "title": "Количество записей на страницу.\nЕсли значение 0 (не передано), то будет взято значение по умолчанию.\n# Диапазон: 0..100.\n# По умолчанию: 20"
          },
          "offset": {
            "type": "integer",
            "format": "int32",
            "title": "Сдвиг.\n# Диапазон: 0..2147483647"
          }
        },
        "title": "Постраничный вывод"
      },
      "v1ValidationError": {
        "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": {
              "preset:edit": "Предоставляет полный доступ в сервис preset",
              "preset:read": "Предоставляет доступ на чтение данных из сервиса preset"
            }
          }
        }
      }
    }
  },
  "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"
    }
  ]
}